こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

cのプログラミング

//ユーザーが入力した文字の個数をカウントする

#include<stdio.h>

int main()
{
char ch;
int moji;
int s_cunt=0, a_cunt=0, k_cunt=0;

printf(\"文字を入力してください-->\");

do{
ch = getchar();

if(\'0\'<=ch && ch<=\'9\')
moji = 1;

else if(\'a\'<=ch && ch<=\'z\')
moji = 2;

switch(moji){
case 1:
s_cunt++;
break;

case 2:
a_cunt++;
break;

default:
k_cunt++;
break;
}
}while(ch != \'\\n\');

printf(\"数字の入力数:%d\\n\",s_cunt);
printf(\"英字の入力数:%d\\n\",a_cunt);
printf(\"区切りの入力数:%d\\n\",k_cunt);

return 0;
}

数字、英字、区切り文字をそれぞれリターンキーが押されるまでカウントして出力したいのですが上手く出力されません。このプログラミングは全然違いますか?

投稿日時 - 2004-04-06 01:38:16

QNo.824117

暇なときに回答ください

質問者が選んだベストアンサー

補足の方は、

do{
// ここで加算処理
} while(入力文字の判定);

となっているので、加算処理された後で判定され、
do ループを終わります。
symgt さんの方は、

while(判定){
// 加算処理
}

となっていますので、最初に判定され、判定で除外
されない場合のみ加算されます。
プログラムは、if, for, do, while, ... などの制御
文以外は上から下へ順に実行されます。

symgt さんのコードをお使いになればよろしいかと思
います。
どうしても while を最後に持って来たいのでしたら
冗長ですが、

do{
if ((ch = getchar()) == '\n') break;
// 加算処理
} while(1); // ←無限ループ指定

とすることも出来ます。これの最初の2行は、
symgt さんの while(...) の分割に相当します。
(注意:!= を == に変えてあります。)

投稿日時 - 2004-04-06 17:11:30

お礼

ありがとうございました。
これからも質問に答えてください。

投稿日時 - 2004-04-06 21:20:34

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

symgt さんの回答は、リターンキーが来たら結果を出し、
リターンキーの分はカウントされません。
補足の方は、カウントして、結果表示へ行きます。
どっちを取るかは、作成者の意図によります。

投稿日時 - 2004-04-06 08:07:56

補足

リターンキーの分は加算したくないのですが補足の方でやるとリターンキーの分が最後に入力した文字の所に加算されてしまいます。どのような理由で入るのでしょうか?
また、どこを変えればよいでしょうか?

投稿日時 - 2004-04-06 16:29:48

ANo.1

とりあえず正常に動作するように修正してみました。
余計な'\'を削除しないとコンパイルすら出来ません。
※Borland C++ 5.5.1で動作確認済みです。

#include<stdio.h>

int main()
{
char ch;
int s_cunt=0, a_cunt=0, k_cunt=0;

printf("文字を入力してください-->");

while((ch = getchar()) != '\n') {
if('0'<=ch && ch<='9')
s_cunt++;
else if('a'<=ch && ch<='z')
a_cunt++;
else
k_cunt++;
}
printf("数字の入力数:%d\n",s_cunt);
printf("英字の入力数:%d\n",a_cunt);
printf("区切りの入力数:%d\n",k_cunt);
return 0;
}

投稿日時 - 2004-04-06 02:46:31

補足

do{
ch =getchar();

if('0'<=ch && ch<='9')
s_cunt++;
else if('a'<=ch && ch<='z')
a_cunt++;
else
k_cunt++;
}while(ch != '\n');

では、駄目でしょうか?

投稿日時 - 2004-04-06 03:31:03

お礼

ありがとうございました。

投稿日時 - 2004-04-06 21:21:18

あなたにオススメの質問