餐厅计划,重复时,跳过第一个输入

时间:2017-10-05 14:25:46

标签: c

这里的编程新手:3 (不要检查我的个人资料,我实际上只知道C,现在......)

我在这里需要帮助,我不知道是什么导致了这个问题,但每当我重复这个程序时,它会跳过要求替换值

char C1.name

在功能

void Name()
{
p("ENTER NAME: ");
gets(C1.name);
p("CONTACT DETAILS: ");
s("%d", &C1.cont_no);
}

在我的计划中

#include <stdio.h>
#include <windows.h>
#define p printf
#define s scanf

void Name();
void Order();
void Total();
void Receipt();
char Repeat();

/* CUSTOMER DETAILS */
struct CustomerOrder
{
    char name[50];
    long int cont_no;
    int qty;
    float price, total;
} C1;

main()
{
    char cont;

    /* Program Process... */

    do{
        Name();
        Order();
        Total();
        Receipt();

        cont = Repeat();
        }while(cont == 'Y');
}

void Name()
{
    /* ENTER NAME AND CONTACT DETAILS */
    p("ENTER NAME: ");
    gets(C1.name);
    p("CONTACT DETAILS: ");
    s("%d", &C1.cont_no);
}

void Order()
{
    /* ENTER ORDERS */
    p("HOW MANY ORDERS: ");
    s("%d", &C1.qty);

    C1.price = 59.99;
}

void Total()
{
    /* TOTAL */
    C1.total = C1.price * C1.qty;

    p("TOTAL IS: %.2f", C1.total);
    system("pause");
} 

void Receipt()
{
    system("cls");
    /*PRINTED RECEIPT SAMPLE */
    p("NAME IS: %s\n", C1.name);
    p("CONTACT DETAILS: %d\n", C1.cont_no);
    p("QTY: %d\n", &C1.qty);
    p("PRICE EACH: %.2f\n", C1.price);
    p("TOTAL PAYOUT: %.2f\n", C1.total);
}

char Repeat()
{
    /* ASKS USER TO REPEAT PROGRAM, THEN RETURN VALUE TO BE USED BY function 
    main */
    char repeat;

    p("REPEAT?: ");
    s("%s", &repeat);

    return repeat;
}

你可能会注意到其他问题(如果有的话我不知道,但我希望不要跳过Name部分和东西...

1 个答案:

答案 0 :(得分:0)

你只想在要求用户重复这样的改变时获得一个角色

s("%s", &repeat);

              s(" %c", &repeat);

如果添加空格^,您将跳过之前输入的\ n。