C Primer Plus 第六版 第八章课后编程练习第八题求助
这是题目:编写一个程序,显示一个提供加法、减法、乘法、除法的菜单。获得用户选择的选项后,程序提示用户输入两个数字,然后执行用户刚才选择的操作。该程序只接受菜单提供的选项。程序使用float类型的变量储存用户输入的数字,如果用户输入失败,则允许再次输入。进行除法运算时,如果用户输入0作为第2个数(除数),程序应提示用户重新输入一个新值。该程序的一个运行示例如下:
#include<stdio.h>
char choice(void);
char get(void);
int main(void)
{
char ch,ch1;
float num1 = 0,num2=0;
while ((ch=choice())!='q')
{
switch (ch)
{
case 'a':ch = '+';
break;
case 's':ch = '-';
break;
case 'm':ch = '*';
break;
case 'd':ch = '/';
break;
case 'q':printf("Bye.\n");
break;
default:
continue;
}
printf("Enter first number:");
while (scanf_s("%f", &num1) != 1)
{
while ((ch1 = getchar()) != '\n')
putchar(ch1);
printf(" is not an number\n");
printf("Please enter a number,such as 2.5,-1.78E8,or 3:");
}
printf("Enter second number:");
while (scanf_s("%f", &num2) != 1)
{
while ((ch1 = getchar()) != '\n')
putchar(ch1);
printf(" is not an number\n");
printf("Please enter a number,such as 2.5,-1.78E8,or 3:");
}
if (ch == '+')
printf("%f + %f = %f\n", num1, num2, num1 + num2);
else if(ch=='-')
printf("%f - %f = %f\n", num1, num2, num1 - num2);
else if(ch=='*')
printf("%f * %f = %f\n", num1, num2, num1 * num2);
else if (ch == '/')
{
if (num2 == 0)
{
printf("Enter a number other than 0:");
while (scanf_s("%f", &num2) != 1)
{
while ((ch1 = getchar()) != '\n')
putchar(ch1);
printf(" is not an number\n");
printf("Please enter a number,such as 2.5,-1.78E8,or 3:");
}
}
printf("%f / %f = %f\n", num1, num2, num1 / num2);
}
getchar();**//加了getchar()之后程序第二遍运行不会出现Please respond with a,s,m,d or q.,没加getchar()程序第二遍运行会出现Please respond with a,s,m,d or q.**
**
}
printf("Bye.");
getchar();
return 0;
}
char choice(void)
{
int ch;
printf("Enter the operation of your choice:\n");
printf("a. add s. subtract\n""m. multiply d. divide\n""q: quit\n");
ch = get();
while (ch != 'a' && ch != 's' && ch != 'd' && ch != 'm' && ch != 'q')
{
printf("Please respond with a,s,m,d or q.\n");
ch = get();
}
return ch;
}
char get(void)
{
int ch;
ch = getchar();
while (getchar() != '\n')
continue;
return ch;
}
图为没有加getchar();语句的时候
图为加了getchar()之后的运行结果
本人小白,想问这个情况是换行符造成的吗? 我应该已经用语句
while (getchar() != ‘\n’)
continue;
处理掉换行符造成的影响了。
请各位大神解答,谢谢!