C 如何修复此do while循环,以便控制台程序在自动关闭前提示用户?
当我运行这段代码时,直到最后一部分,一切都运行顺利。在询问“是否要重复?”问题后,控制台不会提示用户回答,而是结束程序 如何编辑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
#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()处理浮点值。@eltusenscanf()
返回成功的作业数。对不起,我是初学者,我不知道这是什么意思。
char ch;
ch == "A";
while(repeat=="y"||repeat=="Y");
while(repeat == 'y' || repeat == 'Y');
char operation, repeat="y";
char operation, repeat = 'y';