C中的字符有问题

use*_*767 2 c compiler-errors char fgetc

为什么这不编译?无法看到错误

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char *c;
    FILE *f = fopen("file.txt", "r");

    if(f == NULL) {
        printf("Could not open file");
    }

    while((c = fgetc(f)) != EOF) {
        if(strcmp(c, " ") == 0) {
            printf(" ");
        } else if(strcmp(c, ":") == 0) {
            printf(":");
        } else if(strcmp(c, "@") == 0) {
            printf("@");
        } else if(strcmp(c, "\n") == 0) {
            printf("\n");
        } else {
            printf("Not a valid char");
    }
}
Run Code Online (Sandbox Code Playgroud)

}

cod*_*ict 11

fgetc 将当前在文件指针处的char作为整数返回.

因此,char *c;int c;

if(strcmp(c, " ") == 0) {
Run Code Online (Sandbox Code Playgroud)

应该

if(c == ' ') {
Run Code Online (Sandbox Code Playgroud)

并同样改变其他比较.

您可以将比较压缩为:

while((c = fgetc(f)) != EOF) {
    if(c == ' ' || c == ':' || c == '@' || c == '\n') {
        printf("%c",c);
    } else {
        printf("Not a valid char");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1因为您将c的类型定义为int而不是char. (3认同)