-1

我想编写一个程序来扫描每一行并打印出来。当检测到特定线路时,此过程也应继续进行。这是我的文件内容:

1
2
3
4
5
6
7
8
9

和代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE *file;
int main(){
    file=fopen("numbers.txt","r");
    char line[10];

while(1){
         fgets(line,10,file);
         printf("%s \n\n",line);
         if(strcmp(line,"6")) break;
}

    fclose(file);
    system("pause");
    return 0;
}

但是循环不起作用,只打印第一行。哪里有问题?

4

3 回答 3

6

strcmp如果字符串不匹配,则返回非零,如果匹配则返回零。

改变你的测试:

if( 0 == strcmp(line,"6") ) break;
于 2013-11-07T22:44:13.517 回答
0

我认为您的意思是if(! strcmp(line,"6")) break; (当字符串相等时 strcmp 返回 0)

于 2013-11-07T22:45:02.200 回答
0

这应该有效:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE *file;
int main(){
    file=fopen("numbers.txt","r");
    char line[10];

    while(1){
             fgets(line,10,file);
             printf("%s \n\n",line);
             if(!strcmp(line,"6\n")) break;
    }

    fclose(file);
    system("pause");
    return 0;
}

你有两个问题,如果字符串相等,第一个 strcmp 返回 0,第二个 fgets 返回新行标记 '\n',所以你也必须匹配它。

于 2013-11-07T22:51:19.467 回答