• ベストアンサー

scanfで正しい値を入力できない

キーボード入力をするためにscanfを使い、scanf("%c%s,&c,&s)を使用しましたが、この値をprintfで確認すると 入力しない値が表示されます。この回避方法を教えていただけませんか。

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

  • ベストアンサー
回答No.4

> 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 改行で検索すればすぐに出てくると思います。

miya2003
質問者

お礼

できました。ありがとうございました。 scanf 改行で検索したら沢山出てきまして、初心者はscanfを使うなというメッセージになるほどと思いました。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#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を使うことにしたらどうでしょう。

miya2003
質問者

お礼

できました。ありがとうございました。 いろいろな方法があるのですね。

回答No.3

> 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); 「:」の位置を変えてください。

miya2003
質問者

補足

すみません.間違えました。実は下記のようなプログラムです。 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)
回答No.2

入力しない値が表示されます。: どういう結果だったか書いたらどうでしょうか? 質問するのならば回答しやすいように 回答社に負担をかけないようにすべきです プログラム内容(main行を書いても5行程度で済むはず)とその結果を書くほうがいいでしょう

miya2003
質問者

お礼

早速のご返事ありがとうございました。 ご指摘のとおりだと思いました。すみません。 プログラムは下記になります。 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 になります。

回答No.1

> scanf("%c%s,&c,&s)を使用しましたが この部分だけ示されても分かりません。出来ればその前後も示していただきたいのですが、もしかしたら以下のように書き換えればうまくいくかもしれません。 scanf("%c%s",&c,s); sの前にある&をとったものです。

miya2003
質問者

お礼

早速のご返事ありがとうございました。 結果は同じで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); }

関連するQ&A

専門家に質問してみよう