2016-07-16 7 views
0

私のプログラムはシンプルですが、解決できないバグがあります。Scanf関数のバグ

#include <stdio.h> 
int main(int argc, const char * argv[]) { 

char name[100]; 
int age; 

printf("What's your name?\n"); 
scanf("%s", name); 

printf("Hey %s!\n",name); 

printf("How old are you?\n"); 
scanf("%d\n", &age); 

printf("You're %d years old, cool!\n", age); 


return (0); 
} 

私は年齢のためにscanfに到達したとき、私はバグを持っている: は、ここでは、コードです。一度22などの数字を入力しても、Enterキーを押すことになっています。しかし、これはちょうど新しい行を作ります。プログラムが自分の整数値を検出できないようです。

答えて

1
scanf("%d\n", &age); 

scanf("%d\n", &age)scanf("%d ", &age)と同じであることを

scanf("%d", &age); 

注意する必要があります。これには、入力を整数にしてから空白(改行など)を入力する必要があります。走査は次の非空白の後に停止します。本質的にはscanf("%d %s", ...)と同じですが、どこにでも文字列を格納することなく(私はここで少し手を振っています)。 scanf()ため

マニュアルはここに見つけることができる:http://en.cppreference.com/w/c/io/fscanf

+0

これは完璧です!ありがとうございました! –

1

あなたのscanfコードからのn \を削除します。

printf("How old are you?\n"); 
scanf("%d", &age);// Used to be scanf("%d\n", &age); 
+0

ああ、[OK]を、ありがとうございました。これには何らかの理由がありますか? –

+0

また、 'scanf'の戻り値を確認すると便利でしょう –

+0

ああ、私は例外をキャッチしてintの場所に文字列(例えばhello)を挿入できないことを教えてくれますか?これについての文書はありますか?申し訳ありません私はCの新しいです:) –