プロが教えるわが家の防犯対策術!

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

A 回答 (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 改行で検索すればすぐに出てくると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/06 07:59

#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を使うことにしたらどうでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/06 08:01

> 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

よろしくお願いします。

補足日時:2004/09/05 21:05
    • good
    • 0

入力しない値が表示されます。

:

どういう結果だったか書いたらどうでしょうか?
質問するのならば回答しやすいように
回答社に負担をかけないようにすべきです
プログラム内容(main行を書いても5行程度で済むはず)とその結果を書くほうがいいでしょう
    • good
    • 0
この回答へのお礼

早速のご返事ありがとうございました。
ご指摘のとおりだと思いました。すみません。

プログラムは下記になります。
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
になります。

お礼日時:2004/09/05 15:44

> scanf("%c%s,&c,&s)を使用しましたが



この部分だけ示されても分かりません。出来ればその前後も示していただきたいのですが、もしかしたら以下のように書き換えればうまくいくかもしれません。

scanf("%c%s",&c,s);

sの前にある&をとったものです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/05 15:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!