这是我在这里的第一篇文章。这个月我开始学习软件工程,我正试着用c编写一个软件。我找不到改的地方。有人能帮帮我吗?
#include <stdio.h>
void main()
{
int a,b,e;
char operation;
printf ("enter the first number:");
scanf ("%d",&a);
printf ("enter the second number:");
scanf ("%d",&b);
printf ("enter the operation:");
scanf ("%c", &operation);
switch (operation)
{ case '+' : e=a+b;
break;
case '-' : e=a-b;
break;
case '*' : e=a*b;
break;
case '/' : e=a/b;
break;
default: printf("wrong choice!!");
}
printf("%d %c %d = %d n", a, operation, b, e);
}
正如@Oka已经提到的,scanf()将新的行字符留在缓冲区中。
你必须丢弃换行字符,你可以简单地使用getchar()
函数在最后一个scanf
之前丢弃单个字符(可能是换行字符或不是),要100%确定从输入缓冲区中丢弃所有未读字符,你可以做
while((c = getchar()) != 'n' && c != EOF)
或者可以使用" %c"
(空格%c)来忽略前导换行符。
#include <stdio.h>
void main()
{
int a,b,e;
char operation;
printf ("enter the first number:");
scanf ("%d",&a);
printf ("enter the second number:");
scanf ("%d",&b);
getchar();
printf ("enter the operation:");
scanf ("%c", &operation);
switch (operation)
{ case '+' : e=a+b;
break;
case '-' : e=a-b;
break;
case '*' : e=a*b;
break;
case '/' : e=a/b;
break;
default: printf("wrong choice!!");
}
printf("%d %c %d = %d n", a, operation, b, e);
}
您的scanf ("%c", &operation);
正在读取换行字符从上面的scanf语句中取出n
。所以,要正确扫描操作语句,你必须添加getchar()
,它检测换行字符n
.