当前位置: 首页 > 知识库问答 >
问题:

c++ - while循环中的while循环中 (嵌套两个while循环) 的scanf_s为什么还没进行输入就直接下一步了?

梁俊智
2023-04-26
#include <stdio.h>
#define RATE1 0.15
#define RATE2 0.2
#define RATE3 0.25
int main(void)
{
    float salary = 0; //总工资(含税收
    int hour = 0; //工作小时数
    float tax = 0; //税收
    float income = 0; //收入
    float wage = 0; //基本工资
    int option = 0; //基本工资选项
    char choice; //“是否重新计算”选项


    while (1)
    {
        printf("*****************************************************************\n");
        printf("Enter the number corresponding to the desired pay rate or action:\n");
        printf("1) $8.75/hr            2) $9.33/hr\n");
        printf("3) $10.00/hr            4) $11.20/hr\n");
        printf("5) quit\n");
        printf("*****************************************************************\n\n");
        printf("Enter your option:>");
        scanf_s("%d", &option);
        switch (option)
        {
        case 1:
            wage = 8.75;
            break;
        case 2:
            wage = 9.33;
            break;
        case 3:
            wage = 10.00;
            break;
        case 4:
            wage = 11.20;
            break;
        case 5:
            return 0;
        default:
            printf("Please enter the correct options\n\n");
            continue;
        }
        printf("Enter work-hours:>");
        scanf_s("%d", &hour);
        if (hour > 40)
            salary = hour * wage + (hour - 40) * 1.5 * wage;
        else
            salary = hour * wage;
        if (salary <= 300)
            tax = salary * RATE1;
        else if (salary >= 300 && salary <= 450)
            tax = 300 * RATE1 + (salary - 300) * RATE2;
        else
            tax = 300 * RATE1 + 150 * RATE2 + (salary - 450) * RATE3;
        income = salary - tax;
        printf("SALARY: %f\n   TAX: %f\nINCOME: %f\n\n", salary, tax, income);
        while (1)
        {
            printf("Whether to recalculate<Y/N>:>");
            scanf_s("%c", &choice, 1);
            if (choice == 'N' || choice == 'n')
                return 0;
            else if (choice == 'Y' || choice == 'y')
                break;
            else
                printf("Please enter the correct options\n\n");
        }
    }
    return 0;
}

在最下面这个while循环中,调试时没在scanf_s停留就直接进行下一步,这是怎么回事?
这个是C Prime Plus第六版第七章编程练习第8题

共有1个答案

赫连捷
2023-04-26

你的问题是在输入缓冲区中遗留了('\n')所导致的,参考一下这些修改试试:

// ...其他代码...
while (1)
{
    printf("Whether to recalculate<Y/N>:>");

    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF);

    scanf_s("%c", &choice, 1);
    if (choice == 'N' || choice == 'n')
        return 0;
    else if (choice == 'Y' || choice == 'y')
        break;
    else
        printf("Please enter the correct options\n\n");
}
// ...其他代码...
 类似资料:
  • 我用For创建了一个嵌套循环,这是程序代码和输出,然后我尝试了同时循环,得到了不同的结果 对于 虽然 请引导我。。谢谢

  • 大家好,初学者, 被困在这里一段时间了。故障排除我要么得到一个无限循环,要么它只循环11次(我希望外部循环21次)。基本上,我读这是因为第一个循环将被执行,因为它将是真的,第二个循环将被执行十次,直到它不是真的。然后外部循环将绕过内部循环继续运行(因为条件不再有效),直到外部条件不再为真。 提前道谢!

  • 在 C# 中,while 循环用于多次迭代一部分程序,特别是在迭代的次数不固定的情况下,建议使用 while 循环而不是 for 循环。while 循环的语法格式如下所示: while(表达式){     循环主体;         // 要执行的代码 } 其中,循环主体可以是一个单独的语句,也可以是多条语句组成的代码块,当表达式的为真时,循环会一直执行下去。 while 循环的执行流程如下图所示

  • C++ 循环 只要给定的条件为真,while 循环语句会重复执行一个目标语句。 语法 C++ 中 while 循环的语法: while(condition) { statement(s); } 在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。condition 可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环。 当条件为假时,程序流将

  • 只要给定条件为真,Perl编程语言中的while循环语句就会重复执行目标语句。 语法 (Syntax) Perl编程语言中while循环的语法是 - while(condition) { statement(s); } 这里的statement(s)可以是单个陈述或一个陈述块。 condition可以是任何表达。 当条件为真时,循环迭代。 当条件变为假时,程序控制将立即传递到循环之后的行。

  • 编写程序时,您可能会遇到需要反复执行操作的情况。 在这种情况下,您需要编写循环语句以减少行数。 JavaScript支持所有必要的循环,以减轻编程压力。 while循环 JavaScript中最基本的循环是while循环,将在本章中讨论。 while循环的目的是只要expression为真,就重复执行语句或代码块。 表达式变为false,循环终止。 流程图 while loop流程图如下 - 语法