- ベストアンサー
scanfで正しい値を入力できない
キーボード入力をするためにscanfを使い、scanf("%c%s,&c,&s)を使用しましたが、この値をprintfで確認すると 入力しない値が表示されます。この回避方法を教えていただけませんか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> scanf("%c%s",&c,&word); > printf("c=%c:r=%s\n",c,word); これを scanf("%c%s",&c,word); // &wordをwordに rewind(stdin); // 追加 printf("c=%c:r=%s\n",c,word); に変更してみてください。 scanf()を使用する際は改行の処理に気を使う必要があります。それについて、ここで述べるのは文字数が多くなってしまうので、ご自分で調べてみてください。scanf 改行で検索すればすぐに出てくると思います。
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#include <stdio.h> int main(void){ char buff[80]; char word[20]; char c; int i; for (i=0;i<3;i++){ fgets(buff,80,stdin); sscanf(buff,"%c%s\n",&c,word); printf("c=%c:r=%s\n",c,word); } return(0); } のように、sscanfを使うことにしたらどうでしょう。
お礼
できました。ありがとうございました。 いろいろな方法があるのですね。
- winterofmeei
- ベストアンサー率22% (20/88)
> printf("c=%cst:r=%s\n",c,str); > c=ast:r=bbbと出力されます。 これで問題ないのではないでしょうか? もしc=a:str=bbbと出力したいのなら、printfを以下のように書き換える必要があります。 printf("c=%c:str=%s\n",c,str); 「:」の位置を変えてください。
補足
すみません.間違えました。実は下記のようなプログラムです。 int main(void){ char word[20]; char c; int i; for (i=0;i<3;i++){ scanf("%c%s",&c,&word); printf("c=%c:r=%s\n",c,word); } } 最初にa bbb と入力すると、c=a:r=bbbですが、 2回目にa bbb と入力すると下記のように異なる値が出力され、三回目の入力をしないまま終了します。 c= :r=a c= :r=bbb よろしくお願いします。
- keyguy
- ベストアンサー率28% (135/469)
入力しない値が表示されます。: どういう結果だったか書いたらどうでしょうか? 質問するのならば回答しやすいように 回答社に負担をかけないようにすべきです プログラム内容(main行を書いても5行程度で済むはず)とその結果を書くほうがいいでしょう
お礼
早速のご返事ありがとうございました。 ご指摘のとおりだと思いました。すみません。 プログラムは下記になります。 int main(void){ char str[20]; char c; scanf("%c%s",&c,str); printf("c=%cst:r=%s\n",c,str); } 現象は入力をa bbb とすると、出力がc=ast:r=bbb になります。
- winterofmeei
- ベストアンサー率22% (20/88)
> scanf("%c%s,&c,&s)を使用しましたが この部分だけ示されても分かりません。出来ればその前後も示していただきたいのですが、もしかしたら以下のように書き換えればうまくいくかもしれません。 scanf("%c%s",&c,s); sの前にある&をとったものです。
お礼
早速のご返事ありがとうございました。 結果は同じでa bbbと入力すると c=ast:r=bbbと出力されます。 プログラムは下記になります。 int main(void){ char str[20]; char c; scanf("%c%s",&c,str); printf("c=%cst:r=%s\n",c,str); }
お礼
できました。ありがとうございました。 scanf 改行で検索したら沢山出てきまして、初心者はscanfを使うなというメッセージになるほどと思いました。