0

虽然 word 和 s2 相同,但不执行 if(strcmp) 语句。哪里错了??我检查了从文件中读取的代码并尝试了“printf”以查看 word 和 s2 是否相同,发现它们在大约 10 次迭代后变得相同,并且应该在那时中断,但程序执行直到 i 是小于零。

请帮忙。提前致谢。PS“words.txt”是fedora操作系统内置的字典文件

#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
     FILE *ptr;
     ptr=fopen("./words.txt","r");
     char word[40];
     char ch;
     int i=70,j=0;
     char s2[] = "2";
     while(i>0){
          while (ch!='\n') {
               ch=fgetc(ptr);
               word[j]=ch;
               j++;
          } 
          word[j]='\0';
          if(strcmp(s2,word) == 0){
             break;
          }
          j=0; 
          if(ch=='\n'){
              ch=fgetc(ptr);
              word[j]=ch;
              j++;        
          }
          i--;
     }
     fclose(ptr); 
     return 0;
 }
4

1 回答 1

2

您在初始化其值之前使用变量:

while (ch != '\n') {

由于初始值ch未知,任何事情都可能发生。但是,表达式最初为真的可能性很高(256 次机会中有 255 次)。在它进入循环一次之后,一切都很好。

要使循环按预期工作,请不要存储\n在缓冲区中。由于s2不包含\n,strcmp()只要换行符存储在其中,就永远不会匹配。

于 2013-07-25T16:55:14.623 回答