2016-02-25 15 views
0

所以我有這個代碼,但是當我運行它時,它總是說,無論我放入多少,文字的數量都是1,並希望它很容易修復。我嘗試將scanf更改爲%s,但這不起作用,因爲它只打印出第一個單詞,但它獲得了正確的單詞數量。c創建一個程序,用於統計句子中的多少個單詞,並將句子中的所有字母大寫。

#include <stdio.h> 

int main() 
{ 
    int words = 0; 
    char ch,sen[100]="", i; 
    printf("Enter a sentence ended by a '.', a '?', or a '!':"); 
     scanf("%[^\n]", sen); 
    while ((ch = getchar()) != '\n') { 
    if (ch == ' ') 
     words++; 
    } 
    words++; 

    for(i=0;sen[i];i++) 
{ 
     if((sen[i]>=97) && (sen[i]<=122)) 
        sen[i]-=32; 
    } 

    printf("Capitalized sentence: %s\n", sen); 
    printf("Total number of words:%d\n", words); 
    return 0; 
} 

回答

1

您的程序有一個主要的錯誤。 scanf()不會讀取/存儲換行符。然後通過getchar()讀取換行符。這個循環只會執行一次。

while ((ch = getchar()) != '\n') { 
if (ch == ' ') 
    words++; 
} 

因此,你只能得到1個單詞。爲什麼你使用2種方法進行輸入。使用scan()和操作變量「sen」或使用getchar()並將字符1以1存儲在內存中。

// don't use scanf() in this case 
i=0; 
while ((ch = getchar()) != '\n') { 
if (ch == ' ') 
    words++; 
sen[i++] = ch; 
} 

推薦將使用fgets()來獲得這樣的輸入。瞭解它。

+0

如果有兩個或更多'空格'在一起會發生什麼? –

+0

我的座右銘是讓OP瞭解他的計劃中的問題,然後他可以繼續處理特殊情況。 – user2407394

相關問題