C程序,设计一个支票

时间:2011-10-27 23:10:44

标签: c string

我正在编写一个程序,它基本上只需要一堆用户输入并以检查的形式输出它。我的问题是我输入了2个句子,而第二个句子很好,它完全跳过了第一个句子!并且用户的姓氏正在起作用,但是第一个名字只输出“z”,这是最奇怪的事情,我的老师理念是自己想出来的。所以有人可以帮我吗?这是我的代码......

#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;
}

1 个答案:

答案 0 :(得分:1)

您的scanf个来电全部离开了'\n'流(下一个scanf会忽略它。)

第一个fgets读取一个空字符串(好吧......一个包含单个'\n'的字符串)。

尝试将fgets的数字(到临时缓冲区)和sscanf从缓冲区读取到正确的变量。这样,所有'\n'都将被计算在内。