2011-10-27 9 views
1

私は基本的にちょうどユーザーの入力を受け取り、チェックの形で出力するプログラムを作成しています。私の問題は、2つの文章を入力していて、2番目の文はうまくいきますが、最初の文を完全にスキップすることです!ユーザーの姓が機能していますが、最初の名前が「z」を出力するのはそれが最も奇妙なことです。私の教師の哲学はそれを自分自身で把握しています。だから誰も私を助けることができますか?ここに私のコードがある...Cプログラム、チェックを設計する

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char date[8]; 
    int checkNum; 
    char payeeFirst[10]; 
    char payeeLast[10]; 
    double amount; 
    char memo[50]; 
    char wordAmount[100]; 
    printf("Please enter the date: "); 
    scanf("%s", &date); 
    printf("Please enter the check number: "); 
    scanf("%d", &checkNum); 
    printf("Please enter the payee First name: "); 
    scanf("%s", &payeeFirst); 
    printf("Please enter payee last name: "); 
    scanf("%s", &payeeLast); 
    printf("Please enter amount: "); 
    scanf("%d", &amount); 
    printf("Please enter amount in words: "); 
    fgets (wordAmount, sizeof(wordAmount)-1, stdin); 
    printf("Please enter memo: "); 
    fgets (memo, sizeof(memo)-1, stdin); 


    printf("        \n"); 
    printf("Date: %s .\n", date); 
    printf("Check Number: %d .\n", checkNum); 
    printf("Payee: [%s] [%s] .\n", payeeFirst, payeeLast); 
    printf("Amount: %d .\n", amount); 
    printf("         Check %d \n", checkNum); 
    printf("         Date: %s \n", date); 
    printf("Pay to the\n"); 
    printf("Order of %s %s $%d \n", payeeFirst, payeeLast, amount); 
    printf("%s", wordAmount); 
    printf("      \n"); 
    printf("      \n"); 
    printf("Memo: %s \n", memo); 
    return 0; 
} 
+2

文字列をchar []配列に読み込むときに&記号が必要ではないと思います。 scanf( "%s"、日付)のみでなければなりません。編集:そして、私はあなたのコードを破ると思うことを意味する必要はありません。 – Akron

+1

gccを使用している場合は、 '-Wall'フラグを追加してください。 'scanf'を間違って使用すると、警告が表示されます。ここのように:http://ideone.com/oD5F4 –

+1

私はあなたの文字列がnullで終了することを確認します。おそらく、配列の内容を0に初期化します。 – Akron

答えて

1

あなたscanfの呼び出しはすべて、(次のscanfはしかし、それを無視して)ストリームに'\n'を残します。

最初のfgetsは、空の文字列(well ...単一の'\n'を含む文字列)を読み取ります。

数字をfgets(一時バッファに)、そしてsscanfを正しい変数に読み取ろうとしてください。このようにして、'\n'がすべて考慮されます。

関連する問題