2014-07-25 62 views
-1

我無法正確計算行數!匹配列和文件中每個單詞上的行

我的文件是例如a1.txt

Words are flowing out \n 
like \n 
They \n 
Pools dsa\n 
Possessing 

我的代碼:

int main() 
{ 
FILE * file2; 
file2 = fopen("a1.txt","r"); 
int    c ;   
unsigned long  newline_count =1,sthlh_count=0; 
char str[56]; 
while (fscanf(file2,"%s",str)!=EOF)  
    { 
      c=fgetc(file2); 
     printf("%s\n",str); 
      if (c == '\n') newline_count++; 
      if (c == ' ') sthlh_count++; 
      printf("%d %d\n",newline_count,sthlh_count); 

    } 
} 
+1

你爲什麼用'fscanf'和'fgetc'?你試過'while((c = fgetc(file2))!= EOF)'並刪除現有的fgetc行嗎? – itdoesntwork

+0

,因爲我需要編輯這個單詞...我會嘗試那一刻,但再次程序失去「一些」線!!!爲什麼? – GP95

+0

[while((c = fgetc(file2))!= EOF) {\t \t fscanf(file2,「%s」,str); ......]但是再次:( – GP95

回答

1

我不知道你的問題到底是什麼,但我有一兩件事立即看到。

while (fscanf(file2,"%s",str)!=EOF)  

在while循環體,你永遠不使用的str值保存爲printf。請記住,fscanf不僅會讀取文件,而且還會移動文件對象中的指針,以告知運行時您在文件中的位置,因此所有讀入str的字符都不會被循環體中的代碼處理。這就是爲什麼你「失去了線條」。

這裏是你應該做的事情:

while ((c=fgetc(file2)) != EOF) ... 

在這裏,你只是讀取每個字符,其存儲在c,然後檢查如果是EOF。另外,如果您仍然希望printf工作,只需在循環體中打印此字符而不是打印該行。放下另一個fgetc行(或者你將會「失去」字符!)。

+0

我解釋了創建第一個代碼的問題!正確.. c是int或char? – GP95

+0

它應該是一個字符,因爲'fgetc()'返回一個字符 – itdoesntwork

+0

我將需要保存表中的每個單詞,最好的方法是控制如果c ='\ n '然後停止表格? – GP95

0
#include <stdio.h> 
#include <string.h> 

int main(){ 
    FILE *file2 = fopen("a1.txt", "r"); 
    unsigned long newline_count = 0, word_count=0; 
    char line[1024], *word , *delimiter = " \n"; 

    while (fgets(line, sizeof(line), file2)){ 
     ++newline_count; 
     for(word = strtok(line, delimiter); word ; word = strtok(NULL, delimiter)){ 
      printf("%lu %lu : %s\n", newline_count, ++word_count, word); 
     } 
    } 
    fclose(file2); 
    return 0; 
} 
+0

它的作品,但我想要的詞是表和無指針 – GP95

+0

@ GP95 'file2'是指針。你說什麼是你說的「餐桌」? – BLUEPIXY

+0

@ GP95它就像這個'char table [16] [56];' – BLUEPIXY