c - 如何清除循环中的第一个输入以正确计算第二个输入?

标签 c

显然,我正在运行一个程序,它应该创建一个餐厅,包括菜单、顾客、报告等。

所以我首先执行客户功能,然后循环执行(客户 1、客户2、客户3),但在完成客户 1(计算 cus1 的总数)后,我继续循环并继续执行客户2.但是这个问题出现了,我的客户2的总数与客户1的总数混淆了(为了更好地澄清,客户2的总数是cus1+cus2,但我只想要客户2的)

如果有人知道,请给我指导,将不胜感激,谢谢!

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
#define COMBOA 8.50
#define COMBOB 10.50
#define COMBOC 18.00
#define COMBOD 32.50

void main()
{
    void logo();
    void menu();
    char cus();

    logo();
    menu();
    cus();

    system("pause");
}

void logo() //Restaurant's logo
void menu() //Restaurant's menu

char cus()
{
    char combo;
    double total, combo1, total2 = 0;
    int quan, cus = 1;

    do
    {
        printf("Customer No: %d\n\n", cus);
        ++cus;

        do {
            printf("Please select Combo A/B/C/D (Enter 'X' to exit) : ");
            scanf(" %c", &combo);
            fflush(stdin);

            if (combo == 'X' || combo == 'x')
                break;
            printf("Quantity : ");
            scanf(" %d", &quan);

            switch (combo) //about the combo prices

            total = (double)quan * combo1;
            total2 += total;

            if (combo != 'A' && combo != 'a' && combo != 'B' && combo != 'b' && combo != 'C' && combo != 'c' && combo != 'D' && combo != 'd')
                total2 == total;

            printf("\t\tCOMBO %c : %d @ RM%.2f = RM %.2f\n", combo, quan, combo1, total);
     } while (combo != 'X' || combo != 'x');

        printf("\t\tTOTAL AMOUNT PURCHASED = RM %.2f\n", total2);

 return 0;

}

最佳答案

您的变量将在循环的每次迭代中重置,然后仅在同一迭代中使用,然后再次重置。在循环内声明它们,或者更好的是在使用它们的 block 内声明它们。

在本例中,这将是包含设置它们的 scanf() 语句的 block 。

(顺便说一句,处理美元和美分的代码始终使用定点而不是 32 位浮点,以避免舍入错误。)

关于c - 如何清除循环中的第一个输入以正确计算第二个输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443790/

相关文章:

mtrace 可以用 valgrind 成功运行吗?

c - 将 config.txt 数据保存在双向链表中

c - 用结构体写入结构体

c - 使用 RNDADDENTROPY 将熵添加到/dev/random

将字符数组转换为整数数组

c - 等待几个线程之一完成?

C 空指针算法

c - 在c-crash中删除链表

c++ - 复杂 C 语法的含义

c - C 中的堆栈指针与堆指针