2016-09-04 7 views
-8
#include <stdio.h> 

struct Bank { 
    char name[500]; 
    int mobile; 
    float balance; 
}; 

int main() { 
    int i; 
    struct Bank a[100]; 

    for (i = 0; i < 3; i++) { 
     printf("Enter the name of person %d: ", i + 1); 
     gets(a[i].name); 
     printf("Enter the mobile of person %d: ", i + 1); 
     scanf("%d", &a[i].mobile); 
     printf("Enter the mobile of person %d: ", i + 1); 
     scanf("%f", &a[i].balance); 
    } 

    for (i = 0; i < 3; i++) { 
     puts(a[i].name); 
     printf("His Balance is: %f", a[i].balance); 
     printf("His Mobile number is : %d \n\n", a[i].mobile); 
    } 

    return 0; 
} 

これを実行してみてください。私はそれらをしたいだけに実行してください。私は間違って何をしていますか?何かがこれに常に間違っています

+0

ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

+0

あなたは何をしたいですか? –

+1

'stdout'はラインバッファですので、' printf'の最後に '\ n'を追加するか、バッファをフラッシュしてください。 – mch

答えて

2

期待通りに動作しないのは、おそらく前の "Enter"ヒットからgets()への2番目と3番目の繰り返しで入力バッファに改行文字が残っているからです。

gets()呼び出しをscanf("%s", a[i].name)に変更すると、予想どおりに動作します(以下を参照)。

ことに注意してください。

  • このコードは複数行にオーバーフロー(すべてのscanf()となる()呼び出し)をバッファリングするひどく脆弱である - など、here、又はhere、又はhere参照、一番下の行:あなたは境界なしで、まったく)(取得ものscanf()を使うべきではありません

  • あなたは第三のprintfのタイプミスがあり、それが再び携帯電話番号

を要求210
関連する問題