2016-06-23 16 views
0

スキャンして印刷した後にこの構造を持ち、pとqが印刷されますがrは印刷されません。理由を教えてください。印刷中にb.rが表示されないのはなぜですか?

struct book 
{ 
int p; 
float q; 
char r; 
}; 

int main() 
{ 
struct book b; 
scanf("%d%f",&b.p,&b.q); 
scanf("%c",&b.r); 
printf("%d......%f.....%c",b.p,b.q,b.r); 

return 0; 
} 
+2

'のscanf(「%cの」、&b.r);'だから。 – user3078414

+0

ことがある。あなたは、それを入力する方法を知っている必要があります:http://ideone.com/DV1LFq – mch

+0

なぜ私は何かを印刷しないスキャンの間に浮動小数点とcharの間にスペースを追加する理由は? –

答えて

2

問題:b.r\n文字にかかるためだ

が前scanf()文の末尾に入力された

scanf("%d%f",&b.p,&b.q); 

ソリューション:

スペースを与えるのはなぜ

scanf()

scanf(" %c",&b.r); 

%c前にスペースを与えることによってそれを避けますか?

入力ストリーム中に存在する任意の空白(' 'または'\n'または'\0')がある場合、これは消費することになる


提案:あなたが得ることはありません

次回任意の出力を印刷するときには、その値をintにキャストしてASCII値を印刷してみてください。対応する文字はascii tableです。例えば、あなたのprintfステートメントにこの除き、あなたのコードに変更を加えることなく

printf("%d",(int) b.r); 

printf("%d......%f.....%d",b.p,b.q,(int)b.r); 

はあなたが取得したい

入力:

2 
2 

出力:

2.....2.....10 

なぜ10

あなたはフロート入力や文字入力の間に空白をしたい場合、それは\nのASCII値または改行文字

+0

です。スペースでも構いません。私は入力のために1 1を入力していました。同じ問題です。 – ebyrob

+0

@ebyrobあなたが言うことを得ることができません... – Cherubim

+0

あなたはすでにそれに答えました。 ''''はセパレータとして使用できます。 – ebyrob

関連する問題