循环在C编程中不起作用

时间:2013-11-07 22:42:26

标签: c file fgets

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

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;
}

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

3 个答案:

答案 0 :(得分:6)

如果字符串匹配,则

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

更改您的测试:

if( 0 == strcmp(line,"6") ) break;

答案 1 :(得分:0)

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

答案 2 :(得分: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',所以你必须匹配它。