编写一个程序,显示一个提供加法、减法、乘法、除法的菜单。[C Primer Plus](第六版)8.8
参考链接:择yi的博客.
题目:编写一个程序,显示一个提供加法、减法、乘法、除法的菜单。获得用户选择的选项后,程序提示用户输入两个数字,然后执行用户刚才的操作。该程序只接受菜单提供的选项。程序使用float类型的变量储存用户刚才的数字,如果用户输入失败,则允许再次输入。进行除法运算时,如果用户输入0作为第2个数(除数),程序应提示用户重新输入一个新值。
题目要求除正常的加减乘除的算法功能之外,还要求能够:
- 输入“22 .4"识别成”22.4“正常输入
- 输入英文以及其他字符,要求重新输入
- 除法计算除数不能为0,要求重新输入
一、注意
1.字符的输入
每次输入字符时,都非常可能输入之前的换行符’\n’,导致程序不能正常运行。
而 getchar() scanf() 输入字符都会输入之前的’\n’
- 在输入之后加 getchar() 能“吃掉”换行符 但是如果其他字符不能“吃掉”
- while((ch=geichar())!=’\n’) continue; 能“吃掉”其他的字符
2.scanf()
当scanf("%d",&i)输入不是整型而是字符时,输入并不会储存在i中,用ch=getchar()可得到此时输入的字符。
此时scaf("%d",&i)返回0,输入为整型时返回1。
。
二、代码
#include <stdio.h>
#include <ctype.h>
void display();
float check(float m);
void add(float m,float n);
void subtract(float m,float n);
void multiply(float m,float n);
void divide(float m,float n);
int judge;
int main(void)
{
float first,second;
char option;
display();
scanf("%c",&option);
getchar();
while(option!='q')
{
printf("Enter first number:");
judge=scanf("%f",&first);
first=check(first);
printf("Enter second number:");
judge=scanf("%f",&second);
second=check(second);
while(second==0&&option=='d')
{
printf("Enter a number other than 0:");
scanf("%f",&second);
check(second);
}
switch(option)
{
case 'a':add(first,second);break;
case 's':subtract(first,second);break;
case 'm':multiply(first,second);break;
case 'd':divide(first,second);break;
default :printf("It doesn't work.\n");break;
}
display();
scanf("%c",&option);
while(getchar() !='\n')
continue;
}
printf("Bye.\n");
return 0;
}
void display()
{
printf("Enter the operation of your choice:\n");
printf("a. add s. subtract\n");
printf("m. multiply d. divide\n");
printf("q. quit\n");
}
float check(float m)
{
char ch,sh;
float other;
while(judge==0)
{
while((ch=getchar())!='\n')
putchar(ch);
printf(" is not an number.\n");
printf("Please enter a number, such as 2.5, -1.78E8, or 3:");
judge=scanf("%f",&m);
}
sh=getchar();
if(sh==' ')
{
scanf("%f",&other);
m+=other;
}
return m;
}
void add(float m,float n)
{
printf("%.1f + %.1f = %.1f\n",m,n,m+n);
}
void subtract(float m,float n)
{
printf("%.1f - %.1f = %.1f\n",m,n,m-n);
}
void multiply(float m,float n)
{
printf("%.1f * %.1f = %.1f\n",m,n,m*n);
}
void divide(float m,float n)
{
printf("%.1f / %.1f = %.1f\n",m,n,m/n);
}