【发布时间】:2020-04-08 21:32:58
【问题描述】:
getchar() 不等待输入并直接跳转到下一行。我认为 scanf 和 getchar 之间存在一些不匹配,但无法弄清楚它到底是什么。
#include<stdio.h>
#include<ctype.h>
int main()
{
char ch;
int n1,n2;
printf("Enter the operation of your choice\n");
printf("a. add\ts. subtact\nm. multiply\td. divide\nq. quit\n");
while((ch=getchar())!='q')
{
printf("\nEnter 1st number:\n");
if(scanf("%d",&n1)!=1)
{
printf("Please enter an integer value.\n");
continue;
}
printf("Enter 2nd number:\n");
if(scanf("%d",&n2)!=1)
{
printf("Please enter an integer value.\n");
continue;
}
switch(ch)
{
case 'a':
{ printf(" %d + %d = %d\n",n1,n2,n1+n2);
break;
}
case 's':
{
printf(" %d - %d = %d\n",n1,n2,n1-n2);
break;
}
case 'm':
{
printf(" %d * %d = %d\n",n1,n2,n1*n2);
break;
}
case 'd':
{
if(n2!=0)
{
printf(" %d / %d = %f\n",n1,n2,(float)n1/n2);
break;
}
else
{
printf("Enter a non-zero number for n2\n");
continue;
}
break;
}
}
printf("Enter the operation of your choice\n");
printf("a. add\ts. subtact\nm. multiply\td. divide\nq. quit\n");
}
printf("Bye.");
}
输出:
输入您选择的操作
一个。加 s。减法
米。倍增 d.划分
问。退出
一个
输入第一个数字:
50
输入第二个数字:
25
50 + 25 = 75
输入您选择的操作
一个。加 s。减法
米。倍增 d.划分
问。退出
输入第一个数字:
【问题讨论】:
-
getchar 也读取空格。例如,对应于输入键 Enter 的换行符 '\n'。改用 scanf("%c", &ch);
-
这能回答你的问题吗? scanf getchar function is skipped