带int指针的转换代码 #包括 #包括 无效读取文件(文件*文件); 无效计数(文件*文件、整数*字母、整数*数字、整数*点、整数*空格); 无效打印消息(int*alpha,int*digit,int*punt,int*spaces); 内部主(空){ FILE*FILE=NULL; 读取文件(文件); 返回0; } 无效读取文件(文件*文件){ file=fopen(“/Users/adminaldanny/Desktop/testFile.txt”,“r”); int*alpha=NULL,*digit=NULL,*punt=NULL,*space=NULL; 如果(文件){ 计数(文件、字母、数字、点、空格); fclose(文件); }否则{ perror(“打开文件时出错”); } } 无效计数(文件*文件、整数*字母、整数*数字、整数*点、整数*空格){ int-ch; 而((ch=fgetc(文件))!=EOF){ 如果(isalpha(ch)!=0){ ++阿尔法; }否则,如果(isdigit(ch)){ ++数字; }否则如果(ispunct(ch)){ ++点状; }else if(isspace(ch)){ ++空间; } } 打印消息(字母、数字、点、空格); } 无效打印消息(int*alpha,int*digit,int*punt,int*spaces){ printf(“字母字符:%d\n”,alpha); printf(“数字字符:%d\n”,数字); printf(“标点符号:%d\n”,点号); printf(“空白字符:%d\n”,空格); }

带int指针的转换代码 #包括 #包括 无效读取文件(文件*文件); 无效计数(文件*文件、整数*字母、整数*数字、整数*点、整数*空格); 无效打印消息(int*alpha,int*digit,int*punt,int*spaces); 内部主(空){ FILE*FILE=NULL; 读取文件(文件); 返回0; } 无效读取文件(文件*文件){ file=fopen(“/Users/adminaldanny/Desktop/testFile.txt”,“r”); int*alpha=NULL,*digit=NULL,*punt=NULL,*space=NULL; 如果(文件){ 计数(文件、字母、数字、点、空格); fclose(文件); }否则{ perror(“打开文件时出错”); } } 无效计数(文件*文件、整数*字母、整数*数字、整数*点、整数*空格){ int-ch; 而((ch=fgetc(文件))!=EOF){ 如果(isalpha(ch)!=0){ ++阿尔法; }否则,如果(isdigit(ch)){ ++数字; }否则如果(ispunct(ch)){ ++点状; }else if(isspace(ch)){ ++空间; } } 打印消息(字母、数字、点、空格); } 无效打印消息(int*alpha,int*digit,int*punt,int*spaces){ printf(“字母字符:%d\n”,alpha); printf(“数字字符:%d\n”,数字); printf(“标点符号:%d\n”,点号); printf(“空白字符:%d\n”,空格); },c,type-conversion,C,Type Conversion,我的.txt文件只有4个空格和12个字母字符,但它给了我48个字母字符和8个空格字符?为什么会这样? 另外,当我试图在printMessage方法中打印int指针时,我收到一条警告,没有为任何ints分配内存,count()函数只是增加int指针,而不是int值: #include <stdio.h> #include <ctype.h> void readFile(FILE *file); void count (FILE *file, int *alpha, int

我的.txt文件只有4个空格和12个字母字符,但它给了我48个字母字符和8个空格字符?为什么会这样?
另外,当我试图在printMessage方法中打印int指针时,我收到一条警告,没有为任何
int
s分配内存,
count()
函数只是增加
int
指针,而不是
int
值:

#include <stdio.h>
#include <ctype.h>

void readFile(FILE *file);
void count (FILE *file, int *alpha, int *digit, int *punct, int *spaces);
void printMessage(int *alpha, int *digit, int *punct, int *spaces);

int main( void ) {
FILE *file = NULL;
readFile(file);
return 0;
}

void readFile(FILE *file) {
file = fopen("/Users/AdmiralDanny/Desktop/testFile.txt", "r");
int *alpha = NULL, *digit = NULL, *punct = NULL, *space = NULL;
if (file) {
  count(file, alpha, digit, punct, space);
  fclose(file);
} else {
  perror( "error opening the file" );
}
}

void count (FILE *file, int *alpha, int *digit, int *punct, int *spaces) {
  int ch;

 while ((ch = fgetc(file)) != EOF ) {
   if (isalpha(ch) != 0) {
  ++alpha;
  } else if (isdigit(ch)) {
  ++digit;
  } else if (ispunct(ch)) {
  ++punct;
  } else if (isspace(ch)) {
    ++spaces;
  }
}
 printMessage(alpha, digit, punct, spaces);
}

void printMessage(int *alpha, int *digit, int *punct, int *spaces) {
printf( "alphabetic characters: %d\n", alpha );
printf( "digit characters: %d\n", digit);
printf( "punctuation characters: %d\n", punct );
printf( "whitespace characters: %d\n", spaces );
}
您可以使用
malloc()
,但堆栈分配和传入地址会更简单

++spaces; /* spaces is an int* so this increments the pointer. */
count()
中:

取消引用
int
s进行递增,取消引用进行打印:

(*spaces)++;

由于
count()
的调用者不需要
int
的更新值,只需通过值传递,完全忘记指针(与
printMessage()
相同)。

没有为任何
int
count()分配内存
函数只是增加
int
指针,而不是
int
值:

#include <stdio.h>
#include <ctype.h>

void readFile(FILE *file);
void count (FILE *file, int *alpha, int *digit, int *punct, int *spaces);
void printMessage(int *alpha, int *digit, int *punct, int *spaces);

int main( void ) {
FILE *file = NULL;
readFile(file);
return 0;
}

void readFile(FILE *file) {
file = fopen("/Users/AdmiralDanny/Desktop/testFile.txt", "r");
int *alpha = NULL, *digit = NULL, *punct = NULL, *space = NULL;
if (file) {
  count(file, alpha, digit, punct, space);
  fclose(file);
} else {
  perror( "error opening the file" );
}
}

void count (FILE *file, int *alpha, int *digit, int *punct, int *spaces) {
  int ch;

 while ((ch = fgetc(file)) != EOF ) {
   if (isalpha(ch) != 0) {
  ++alpha;
  } else if (isdigit(ch)) {
  ++digit;
  } else if (ispunct(ch)) {
  ++punct;
  } else if (isspace(ch)) {
    ++spaces;
  }
}
 printMessage(alpha, digit, punct, spaces);
}

void printMessage(int *alpha, int *digit, int *punct, int *spaces) {
printf( "alphabetic characters: %d\n", alpha );
printf( "digit characters: %d\n", digit);
printf( "punctuation characters: %d\n", punct );
printf( "whitespace characters: %d\n", spaces );
}
您可以使用
malloc()
,但堆栈分配和传入地址会更简单

++spaces; /* spaces is an int* so this increments the pointer. */
count()
中:

取消引用
int
s进行递增,取消引用进行打印:

(*spaces)++;

由于
count()
的调用者不需要
int
的更新值,只需传递值,完全忘记指针(与
printMessage()
相同)。

您可以打印指针指向的地址:

printf( "whitespace characters: %d\n", *spaces);
如果只需要值:

printf( "alphabetic characters: %p \n", alpha );

与*位、*点相同……

您可以打印指针指向的地址:

printf( "whitespace characters: %d\n", *spaces);
如果只需要值:

printf( "alphabetic characters: %p \n", alpha );

与*digit、*punct….相同,这就是为什么它打印的字符比平常多4倍的原因吗?如果我计算(文件、&alpha、&digit、&punct、&space);,为什么会出现错误“不兼容指针类型将“int**”传递给类型为“int*”的参数remove&@dannyhuang,您需要将变量的类型从
int*
更改为
int
,如本答案所示。
*空格++;
递增指针(并计算为递增之前指向的值)。您的意思是
++*spaces;
(或
(*spaces)++;
,如果必须使用后增量)来增加指向的值。这就是为什么它打印的字符比通常多4倍的原因吗?如果我进行计数(文件、&alpha、&digit、&putt、&space),为什么会出现错误“不兼容的指针类型传递”int**要删除类型为“int*”的参数和@dannyhuang,您需要将变量的类型从
int*
更改为
int
,如本答案所示。
*spaces++递增指针(并计算为递增之前指向的值)。你的意思是
++*空格
(或
(*空格)++;
如果必须使用后增量)来增加指向的值。如果在打印指针时将指针放在int之前。它给了我一个糟糕的过量crashfirst,将它们引用到纯整数,而不增加地址。如果在打印时将指针放在int之前,则仅增加值。它给了我一个糟糕的过量crashfirst,将它们引用到纯整数,而不增加地址。仅增量值