2017-04-02 16 views
0

小文字(文字のみ)を数えるCの短いコードを書きました。数字などを入力すると機能しなくなります。コードは次のとおりです。入力が文字列になるまで小文字を数えます。

char letter; 
int num=0; 
do 
    if(islower(letter = getchar())) 
     num++; 
while(isalpha(letter)); 
printf("%d", num); 
return 0; 

私の問題は、正常に機能していないということです(結果として「1」しか印刷されません)。 そして、次の文字がアルファベットの文字でないときには停止しなければなりません。その部分が正しいと確信しない。

何が間違っていましたか?ありがとう。

+1

なぜこのC++にタグを付けましたか?あなたは普通のCを求めています、そうですか?タグを削除してください。 –

+2

入力を表示します。 – BLUEPIXY

+0

それは私のために働いています、私はそれをVisual Studio 2013とその完璧な作業で実行します。 –

答えて

0

これは何ですか?

char letter; 
int num=0; 
while (isalpha(letter = getchar())) { 
    if (islower(letter)) num++; 
} 
printf("%d", num); 
return 0; 

次の文字はアルファベットでないときには、停止する必要があります。

入力をバッファリングすることができるキーボード - 入力が

押されるまで処理していないだけで、結果

として「1」を印刷し、コンソールにinputedのいくつかの例を書くことができますが1」に生じました"出力?

0

単一の文字を入力した後に、getchar()を呼び出すと、改行キーの'\n'がバッファされるため、改行文字が返されるという問題があります。改行が処理されるときに、islower()コールなど

do 
    if (islower(letter = getchar())) 
     num++; 
while (isalpha(letter)); 

作品の最初の反復が、プログラム・ディスプレイ「1」はfalseを返します。

これを修正するには、whileループを使用して余分な改行を取り除きます。あなたはそのようにすることができます:

do { 
    while ((letter = getchar()) == '\n') 
     ; 

    if (islower(letter)) 
     num++; 
} while (isalpha(letter)); 
関連する問題