2012-09-25 48 views
0

我是C編程新手,我正在嘗試自學如何創建一個C程序,該程序可以計算輸入流中的單詞和行數,並將兩個總數打印到標準輸出。在標準輸入中對字和行進行計數的C程序

我實際上試圖做的是讓程序計算行數並根據單詞的定義來計算單詞的數量,在這個單詞中,我覺得我已經關閉了。

我希望單詞排除空格,製表符,換行符,連字符或冒號。程序輸出結果(單詞和行)爲小數。

#include<stdio.h> 

int main() 
{ 
    int iochar; 
    int words; 
    int lines; 

    printf("Enter something here:\n\n"); 

    while ((iochar = getchar()) !=EOF) 
    { 
     if((iochar == ' ') || (iochar == '\t') || (iochar == '\n')) 

     putchar(iochar); 
    } 

    return 0; 
} 

我完全關閉這個程序嗎?

+0

當你說,這是「不工作」,你有什麼期待這個節目做的,它是如何不符合您的期望? (我發現它不會編譯,但我不確定這是否是您遇到的問題,或者在發佈到SO時是否遺漏了'}'是簡單的遺漏。) –

回答

0

你的「我想有你的數字是右對齊的8列字段......」我不明白你想說:(

int words = 0; 
int lines = 0; 
char buffer[1024]; 
while(fgets(buffer, sizeof buffer, stdin)) 
{ 
    lines++; 
    if(buffer[0] == '\n') 
     continue; 
    char *tmp = buffer-1; 
    while(tmp = strchr(tmp+1, ' ')) 
     words++; 
    words++; /* count last word before \0*/ 
} 

printf("lines: %d, words: %d\n", lines, words); 

是你所需要的東西后/想

+0

「fgets」是做什麼的,當我試圖看看這是否會與我正在嘗試做的事情一起工作時,它會作爲錯誤返回。 Sory對我的疑惑,據我說,「我試圖讓這些數字在8列的字段中是正確的。」我非常想做的事情是讓程序在標準輸入中計算單詞和行數,並讓它計算單詞和行數,並將其輸出到標準輸出中。 – user1698560

+0

15 156是我想要的那種輸出。幾乎是15的行數,156是單詞。我希望程序計算輸入流中的字數和行數,並在標準輸出中打印這兩個數字。 – user1698560

0

的錯誤信息是:?

Test.c:20:1: error: expected declaration or statement at end of input

它不會編譯,因爲你缺少一個}

假如你正確地縮進你的代碼,就像這樣,你會發現你的錯誤:

#include<stdio.h> 

int main() { 

    int iochar; 
    int words; 
    int lines; 

    printf("Enter something here:\n\n"); 

    while ((iochar = getchar()) !=EOF) 
    { 
     if((iochar==' ')||(iochar=='\t')||(iochar=='\n')) 
     { 
     putchar(iochar); 
     iochar = getchar(); 
     } 
     return 0; 

    } 

然而可讀性:)

+0

如何使用兩種不同風格的支撐提高可讀性?那麼如何縮小if子句中的語句是否符合正確的縮進?不管你如何縮進它,它仍然無法工作。這個邏輯根本上是有缺陷的。 –

+0

@CareyGregory看看原來的帖子;主方法中的代碼不縮進。他還說他的錯誤是它不能編譯。那麼,他的編譯錯誤就是缺少'}'。至於邏輯錯誤,你是對的。所以我會+1你的帖子。 – eboix

+0

是的,我明白你的觀點,我沒有看他原來的帖子。 –

1

如果你的問題是如何解決的編譯錯誤的重要性另一個例子,那很簡單。在最後添加一個右大括號。

但是,當且僅當用戶鍵入空格,製表符或換行符時,您的程序仍然只會循環執行一次並僅打印一個字符。無論用戶輸入什麼內容,程序都會終止。我懷疑這就是你想要的。

我懷疑這是你想要的結果:

while ((iochar = getchar()) !=EOF) 
{ 
    if((iochar == ' ') || (iochar == '\t') || (iochar == '\n')) 
    { 
     putchar(iochar); 
    } 
} 
return 0; 
+0

感謝您的糾正,您認爲該程序可能會從標準輸入的一個字符中讀取數據作爲時間,並將結果輸出到標準輸出。我實際上想要做的是讓程序計算行數並根據單詞的定義來計算單詞的數量,在這個單詞中,我覺得我不在。我希望單詞不要包括空格,製表符,換行符,連字符或冒號。 – user1698560

+0

我建議您再次嘗試使用我提供的更正,然後重新發布以「我實際上正在嘗試做的事情」部分開始的問題。這是你第一次清楚地解釋你的目標是什麼。 –

相關問題