2014-09-10 79 views
0

任何人都知道如何在C語言中執行此操作?跳過c中的文本文件的第一個輸入c

INPUT:(input.txt中)

 
2 WORD WORD WORD 

OUTPUT:

 
File contains: 2 word 
Word are: WORD WORD 

*我'新的C語言編程,我練我的自我。 我有一些代碼,但沒有解決這個問題。 這是我的代碼:

#include<stdio.h> 

int main(){ 
    FILE* f = fopen("input.txt","r"); 
    char c; 
    int l = 1; 

    if(f == NULL){ 
     printf("File not found!"); 
     return; 
    } 
    c = getc(f); 
    while(c != EOF){ 
     if(c == ' '){ 
      l++; 
     } 
     c = getc(f); 
    } 
    fclose(f); 

    printf("File contain: %d word",l); 
    return 0; 
} 

謝謝!

+1

不要輸入文件總是以數字開頭,接着是三個空格分隔的話嗎?那麼爲什麼不用['fscanf'](http://en.cppreference.com/w/c/io/fscanf)一次性閱讀它(它允許你閱讀但放棄一些輸入)。 – 2014-09-10 12:58:40

+3

另外,用你當前的代碼,你犯了一個非常普遍的初學者錯誤:你聲明'c'爲'char',但['getc'](http://en.cppreference.com/w/c/io/fgetc )返回一個'int'。這會導致你的循環條件的問題,因爲'(char)EOF!=(int)EOF' – 2014-09-10 13:00:48

+0

請添加更多的細節,你想跳過,你的樣品'input.txt'等。 – user1336087 2014-09-10 13:01:20

回答

0
#include<stdio.h> 

int main(){ 
    FILE *f = fopen("input.txt","r"); 
    int wc, first_time = 1; 
    char word[128]; 

    fscanf(f, "%d", &wc); 
    printf("File contain: %d word\n", wc); 
    printf("Word are: "); 

    fscanf(f, "%*s");//skip 
    while(1==fscanf(f, "%127s", word)){ 
     if(first_time) 
      first_time = !first_time; 
     else 
      printf(" "); 
     printf("%s", word); 
    } 
    printf("\n"); 
    fclose(f); 

    return 0; 
} 

UPDATE

int c, wc, first_time = 1; 
char word[128]; 

fscanf(f, "%d", &wc); 
printf("File contain: %d word\n", wc); 
printf("Word are: "); 

c = 0; 
while(1==fscanf(f, "%127s", word) && c++ < wc){ 
+0

我不這麼認爲, '輸入:2 WORD WORD WORD' 代碼的輸出是: '文件包含:2 word' '字AR:WORD WORD' 是,但是當我輸入更改爲 '輸入:2 WORD1 WORD2 WORD3' 代碼的輸出是: '文件包含:2 word' '字AR:WORD2 WORD3' 的 「WORD1」 也跳過,而不是顯示.. 因爲這輸入包含'2'和'WORD1 WORD2 WORD3' 用於顯示單詞的輸出將是'WORD1'和'WORD2'... – Polar 2014-09-11 13:21:17

+0

@Seynal我理所當然地認爲跳過t他首先從標題的內容輸入。我將添加讀取循環條件的數字。 – BLUEPIXY 2014-09-11 20:55:06

+0

@Seynal _skip文本文件的第一個輸入_那麼,你會跳過什麼? – BLUEPIXY 2014-09-11 21:05:52

0

我建議使用fgets()來讀取該行,然後將該行分散到單詞中。一旦泄漏,您將很容易進行驗證。

+0

你可以給我一個關於如何用fgest()來做的指導嗎? – Polar 2014-09-10 13:09:19

+0

'fgets()'的文檔可以在這裏找到(http://www.cplusplus.com/reference/cstdio/fgets/)。您提供了一個char [],要讀取的行的最大大小,以及您正在讀取的文件指針。文檔中的例子應該解釋它。 – Grice 2014-09-10 13:26:18

0

您應該從閱讀一條使用fgets的線條開始,剝去前導(也可能是尾隨)空格。

如果第一個字符是數字(使用如isdigit),然後使用strtol轉換爲數字,並隨後根據需要繼續在循環使用與fgets讀線分割的話,直到你在完成線輸入文件。

相關問題