Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
问:如何比较C中文本文件中的字符?_C_Compare_Text Files - Fatal编程技术网

问:如何比较C中文本文件中的字符?

问:如何比较C中文本文件中的字符?,c,compare,text-files,C,Compare,Text Files,因此,我希望能够执行检入,将输入文件的第一个字符与某个字符进行比较(在本例中为*),如果不匹配,则打印“Hello world” 我能从文件中读入。但是strcmp()不允许我比较输入文件字符和声明的字符 int main(void) { FILE *file = fopen("text.txt", "r"); char c; char compare[] = "*" do { c = fgetc(file); com

因此,我希望能够执行检入,将输入文件的第一个字符与某个字符进行比较(在本例中为*),如果不匹配,则打印“Hello world”

我能从文件中读入。但是strcmp()不允许我比较输入文件字符和声明的字符

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

    char c;
    char compare[] = "*"

    do 
    {
        c = fgetc(file);
        compare = strcmp(c,compare); //Something is wrong here I think.
        printf("result: %d \n", compare);
    }
    while (c != EOF);
    fclose(file);
    return 0;
}

函数
strcmp
比较两个字符串。 您试图将单个字符与以null结尾的字符串进行比较
“*”
。我甚至不确定您发布的这段代码是否会编译,因为
strcmp
将两个
char*
作为参数,但您正在传递一个
char
作为第一个参数

此外,您希望字符指针返回
strcmp
,但
strcmp
返回
int


这里有一个关于的参考资料。如果您不确定标准库函数,请使用此网站。但是,在这种情况下,我敦促您为您的问题找到一个不同的、更简单的解决方案(提示:
strcmp
不需要比较
char
s),并练习阅读编译器警告/错误

函数
strcmp
比较两个字符串。 您试图将单个字符与以null结尾的字符串进行比较
“*”
。我甚至不确定您发布的这段代码是否会编译,因为
strcmp
将两个
char*
作为参数,但您正在传递一个
char
作为第一个参数

此外,您希望字符指针返回
strcmp
,但
strcmp
返回
int


这里有一个关于的参考资料。如果您不确定标准库函数,请使用此网站。但是,在这种情况下,我敦促您为您的问题找到一个不同的、更简单的解决方案(提示:
strcmp
不需要比较
char
s),并练习阅读编译器警告/错误

strcmp不比较字符,它是一个循环,比较两个字符数组,直到它们之间存在差异或两个字符串同时以空字符终止

如果要比较两个字符,您要做的是直接比较两个字符,如中所示

char * string1 = "string1";
char * string2 = "string2";
if (string1[0] != string2[0])
    puts("hello world");
还是你的情况

if (c != compare[0])
    puts("hello world");
但是,由于您的比较只有一个字符,并且您希望只比较一个字符,因此最好只将其声明为char,例如

char compare = '*';
...
if (c != compare) 
   puts("hello world");

strcmp不会比较一个字符,它是一个循环,比较两个字符数组,直到它们之间存在差异或两个字符串同时以空字符终止

如果要比较两个字符,您要做的是直接比较两个字符,如中所示

char * string1 = "string1";
char * string2 = "string2";
if (string1[0] != string2[0])
    puts("hello world");
还是你的情况

if (c != compare[0])
    puts("hello world");
但是,由于您的比较只有一个字符,并且您希望只比较一个字符,因此最好只将其声明为char,例如

char compare = '*';
...
if (c != compare) 
   puts("hello world");

你可以这样做(这只是给你一个想法):

#包括
内部主(空)
{
FILE*FILE=fopen(“text.txt”、“r”);
字符c;
字符比较='*';
做
{
c=fgetc(文件);
if(c==比较)
printf(“结果:%c\n”,比较);
}
而(c!=EOF);
fclose(文件);
返回0;
}

你可以这样做(这只是给你一个想法):

#包括
内部主(空)
{
FILE*FILE=fopen(“text.txt”、“r”);
字符c;
字符比较='*';
做
{
c=fgetc(文件);
if(c==比较)
printf(“结果:%c\n”,比较);
}
而(c!=EOF);
fclose(文件);
返回0;
}

Awesome它成功了。但是,它只有在我以这种形式创建函数时才起作用:“if(c!=compare[0])”如果我没有放入[0],那么程序无法编译。这是因为您没有将compare定义为字符,而是将其定义为字符数组。字符数组的值是内存中第一个字符的位置值,这不是您想要的,您需要第一个字符的值,因此必须使用方括号数组访问语义选择它。但是,它只有在我以这种形式创建函数时才起作用:“if(c!=compare[0])”如果我没有放入[0],那么程序无法编译。这是因为您没有将compare定义为字符,而是将其定义为字符数组。字符数组的值是内存中第一个字符的位置值,这不是您想要的,您需要第一个字符的值,因此必须使用方括号数组访问语义来选择它