C 如何修复此do while循环,以便控制台程序在自动关闭前提示用户?

C 如何修复此do while循环,以便控制台程序在自动关闭前提示用户?,c,calculator,do-while,repeat,C,Calculator,Do While,Repeat,当我运行这段代码时,直到最后一部分,一切都运行顺利。在询问“是否要重复?”问题后,控制台不会提示用户回答,而是结束程序 如何编辑do while循环的代码,以便提示用户输入答案,而不是自动关闭程序?我觉得这是一个关于格式说明符的问题,我是新来的,而且一直都有问题。谢谢 #include <stdio.h> int main(void) { double num1, num2; char operation, repeat = "y"; printf("Thi

当我运行这段代码时,直到最后一部分,一切都运行顺利。在询问“是否要重复?”问题后,控制台不会提示用户回答,而是结束程序

如何编辑do while循环的代码,以便提示用户输入答案,而不是自动关闭程序?我觉得这是一个关于格式说明符的问题,我是新来的,而且一直都有问题。谢谢

#include <stdio.h>

int main(void)
{
    double num1, num2;
    char operation, repeat = "y";
    printf("This is a calculator.");

    do {
        printf("\nWould you like to multiply(*), divide(/), add(+) or subtract(-) the two numbers you will soon input? \n");
        scanf("%c", &operation);
        printf("Please enter the first number you would like to deal with. \n");
        scanf("%lf", &num1);
        printf("And the second?\n");
        scanf("%lf", &num2);

        switch (operation)
        {
        case '*':
            printf("The product of %1.2lf and %1.2lf is %1.2lf.\n",
                   num1, num2, num1 * num2);
            break;
        case '/':
            printf("The quotient of %1.2lf and %1.2lf is %1.2lf.\n",
                   num1, num2, num1 / num2);
            break;
        case '+':
            printf("The sum of %1.2lf and %1.2lf is %1.2lf.\n",
                   num1, num2, num1 + num2);
            break;
        case '-':
            printf("The difference of %1.2lf and %1.2lf is %1.2lf.\n",
                   num1, num2, num1 - num2);
            break;
        }
        printf("Would you like to repeat?(y/n)\n");
        scanf("%c", &repeat);
    } while (repeat == "y" || repeat == "Y");
}
#包括
内部主(空)
{
双num1,num2;
字符操作,重复=“y”;
printf(“这是一个计算器”);
做{
printf(“\n是否要将即将输入的两个数字相乘(*)、除(/)、加(+)或减(-)?\n”);
scanf(“%c”,操作(&O);
printf(“请输入您要处理的第一个数字。\n”);
扫描频率(“%lf”和num1);
printf(“第二个?\n”);
扫描频率(“%lf”、&num2);
开关(操作)
{
案例“*”:
printf(“%1.2lf和%1.2lf的乘积是%1.2lf。\n”,
num1,num2,num1*num2);
打破
案例“/”:
printf(“%1.2lf和%1.2lf的商是%1.2lf。\n”,
num1、num2、num1/num2);
打破
格“+”:
printf(“%1.2lf和%1.2lf之和为%1.2lf。\n”,
num1,num2,num1+num2);
打破
案例'-':
printf(“%1.2lf和%1.2lf的差值是%1.2lf。\n”,
num1,num2,num1-num2);
打破
}
printf(“您想重复吗?(是/否)\n”);
scanf(“%c”,重复(&R));
}while(repeat==“y”| repeat==“y”);
}

上一次输入操作的
stdin
中留下了一个换行符。你的

读取该换行符,因为转换说明符
%c
不跳过空白字符。使用

scanf(" %c", &repeat);
跳过前导空格


<> > C和C++中的单个字符用单引号括起来。

char ch;
ch == "A";
ch
的值与字符串literal
“A”
的地址进行比较

所以

~>

~>

你的编译器应该警告你这一点。如果不是,则应增加编译器的警告级别


您可能还需要检查是否被未定义的零除


最后一件事:
printf()
不关心
%lf
中的长度说明符
l
,由于默认参数传播,它与
%f
相同。函数调用中的
float
参数在传递给函数之前,始终会转换为
double
。因此,对于
printf()
,只有
%f


附言: 正如评论中所说:


您应该检查
scanf()的返回值


是的,你应该。永远不要信任用户。

字符应该在单个
之间。
您有两个问题。一个是将单个字符与字符串进行比较。另一个是不要跳过前导空格(就像前面输入的换行符一样)。您应该检查
scanf
的返回值编写代码时通常会在逗号后和运算符周围添加空格,请参见我对您的问题的编辑。它使代码更容易阅读。我仍然喜欢使用
%lf
打印
双精度
,使用
%f
打印
浮点
。这样我就不必去想我是否在
scanf
printf
@CacahueteFrito任何能让你的船漂浮的地方。请注意,在C99和C++11之前是不允许的。如何检查返回值?我最初使用isdigit()尝试了这个方法,但我无法让isdigit()处理浮点值。@eltusen
scanf()
返回成功的作业数。对不起,我是初学者,我不知道这是什么意思。
char ch;
ch == "A";
while(repeat=="y"||repeat=="Y");
while(repeat == 'y' || repeat == 'Y');
char operation, repeat="y";
char operation, repeat = 'y';