2017-10-07 29 views
-1
int main(void) 
{ 
    FILE* fp; 
    char buffer[500]; 
    char tempstr[500]; 
    int i = 0; 
    int j = 0; 
    fp = fopen("aFaire.txt", "r"); 

    while(fgets(buffer, 500, (FILE*) fp)) { 
     i = 0; 
     j = 0; 
     while ((buffer[i]!='\n')&&(buffer[i]!='\0')) 
     { 
      if (buffer[i] !=' '){ 
       tempstr[j] = buffer[i]; 
       i++; 
       j++; 
      } 
      else{ 
       tempstr[j]='\0'; 
       j=0; 
       i++; 
       printf("%s",tempstr); 
       printf("\n"); 
      } 
     } 
    } 
    fclose(fp); 
} 

我想要做的是按行读取一个txt文件,然后我分别在该行中处理每个单词,首先读取缓冲区中的行var,然后复制tempstr中的每个单词,事情是tempstr正在吃点话。一行一行地读取一个txt文件并对每个单词进行处理

+1

注意''\ n''和''\ 0''也必须分隔。 – BLUEPIXY

+0

你的意思是? –

+0

你让空格成为一个单词中断('if(buffer [i]!=''){...}'),但是你需要考虑以换行符结尾的单词(例如''word \ n“')。 (也可能没有换行符)在这种情况下,你正在抛弃'tempstr'的​​内容。 – BLUEPIXY

回答

0

您可以使用fscanf()更轻松地完成此操作。

您需要从输入文件中获取所有单词并将其打印出来。

while(fscanf(fp, "%s", buffer)==1) 
{ 
    printf("\n%s", buffer); 
} 

fscanf()返回成功分配的数量。如果这里不是1,那么文件已经结束或发生了一些错误。

在每次迭代中,一个单词将被读入buffer,然后将被显示。

,并确保fopen()确实通过确保fp打开该文件不是NULL

if((fp = fopen("aFaire.txt", "r"))==NULL) 
{ 
    perror("\nUnable to open input file"); 
    return 1; 
} 

编辑:

在你的程序中,当一个字符是一个\n或循环停止(空间)。但在此之前的角色也可能形成一个词。

while循环结束,加

tempstr[j]='\0'; 
printf("%s\n", tempstr); 

另外,线i++;同时出现在ifelsewhile循环内。因此,除了两个i++;之外,if - else之外的一个就足够了。

printf("%s\n",tempstr); 

while(fgets(buffer, 500, (FILE*) fp)) { 
    i = j = 0; 
    while ((buffer[i]!='\n')&&(buffer[i]!='\0')) 
    { 
     if (buffer[i] != ' '){ 
      tempstr[j] = buffer[i]; 
      j++; 
     } 
     else{ 
      tempstr[j]='\0'; 
      printf("%s\n",tempstr); 
     } 
     i++; 
    } 
    tempstr[j]='\0'; 
    printf("%s\n", tempstr); 
} 

其实,我觉得for循环会更适合,而不是

而且else部分里面,

printf("%s",tempstr); 
printf("\n"); 

可以合并成内部的while循环。

while(fgets(buffer, 500, (FILE*) fp)) { 
    for (i=j=0; (buffer[i]!='\n')&&(buffer[i]!='\0'); i++) 
    { 
     if (buffer[i] != ' '){ 
      tempstr[j] = buffer[i]; 
      j++; 
     } 
     else{ 
      j=tempstr[j]='\0'; 
      printf("%s\n",tempstr); 
     } 
    } 
    tempstr[j]='\0'; 
    printf("%s\n", tempstr); 
} 
+0

这一个工作正常,谢谢,但你还可以,我为什么fgets失败? –

+0

@ D.Mouttie我不认为'fgets()'在你的代码中失败了。产量不同的原因可能是由于BLUEPIXY指出的原因。 –

+1

你们,我解决了它,但我更喜欢你的解决方案,它删除了任何额外的空间,所以我不必对另一个功能,这样做 –

相关问题