• ベストアンサー

整数と文字を同時に扱う

数字を入力して,正ならplusを負ならminusを、 0ならzeroを表示し、ピリオド「.」が入力されたとき プログラムを終了するプログラムを作らなければならないのですが、 整数と文字を同時に扱うのって可能ですか?? 一応、 #include<stdio.h> int main(void){ int a; while (a!='.'){ printf("変数aに数字を入力してください\n"); printf("a="); scanf("%d",&a); if(a>0){ printf("%d is plus\n",a); }else if(a==0){ printf("%d is zero\n",a); }else{ printf("%d is minus\n",a); } } return(0); } で作ったのですが、数字以外を入力すると無限ループします。

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

  • ベストアンサー
noname#50176
noname#50176
回答No.3

正確にいくなら以下を参考にしてみて下さい。 #include<stdio.h> #include<stdlib.h> #define END '.' // 終了コード int main(void){ int a,c,k; char i[10]={1}; while (i[0]){ printf("変数aに数字を入力してください\n"); printf("a="); scanf("%10s",i); for (k=0,c=0;i[k];k++) { if (k) {if (!(i[k]>='0' && i[k]<='9')) {c=1;break;}} else if (!(i[0]>='0' && i[0]<='9' || i[0]=='+' || i[0]=='-')) {c=1;break;} } a=atoi(i); if (!(i[0]-END) && !i[1]) { i[0]=0; continue; } else if (c) { printf("有効な数字ではありません\r\r\n"); continue; } if(a>0){ printf("%d is plus\n",a); }else if(a==0){ printf("%d is zero\n",a); }else{ printf("%d is minus\n",a); }} return (0); }

ionwide
質問者

お礼

皆さん> ご回答ありがとうございます。 おかげで解決しました。 これをC言語を習って4週目でやれってのも厳しいですよねw

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

あえて、このまま行くなら、while ループの判定で int 型と char 型を比較しているので、まずこれを止めて while (1) { .. } と無限ループにします。 scanf() の戻り値は代入が成功した要素の数なので、 数値以外がキーボードから入力されると 0 が戻ってくる。その場合に再度 char 型でバッファを scanf してピリオドと比較、一致すればbreak。

回答No.1

入力が数値かどうかわからない場合は、文字列として受け取るべきだと思います。 受け取った文字列を解析して、数値として読めるかどうか判断するような関数を作れば良いのでしょう。 IsNumeric()という関数がありますが、たしかC言語ではなかったような。 IsNumeric()関数がなければ、真似をして作ってみればいかが?

関連するQ&A