#include <stdio.h>
int main (void) {
float x, z;
char y;
scanf("%f", &x);
scanf("%c", &y);
while (y == 's' || y == 'e' || y == '+' || y == '-' || y == '*' || y == '/') {
if (y == 's') {
z = x;
printf("%f is your basic number now\n", z);
scanf("%f", &x);
scanf("%c", &y);
}
else if (y == 'e') {
printf("end this program now\n");
return 0;
}
else if (y == '+') {
z = z + x;
printf("%f add answer\n", z);
scanf("%f", &x);
scanf("%c", &y);
}
else if (y == '-') {
z = z - x;
printf("%f minus answer\n", z);
scanf("%f", &x);
scanf("%c", &y);
}
else if (y == '*') {
z = z * x;
printf("%f mutiply answer\n", z);
scanf("%f", &x);
scanf("%c", &y);
} else {
z = z / x;
printf("%f divided answer\n", z);
scanf("%f", &x);
scanf("%c", &y);
}
}
return 0;
}
输入界面截图看一下
你的浮点数和字符e是分成两行输入的吧?那在输入e之前要加入一句getchar()接收到换行符。否则y接收的就是换行符,而不是e
同样的代码写了太多次了,罗里吧嗦的
#include <stdio.h>
int main (void) {
float x,z;
char y='1';
while(y!='e')
{
scanf("%f%c", &x,&y);
getchar();
switch(y)
{
case 's':
z=x;
printf("%f is your basic number now\n", z);
break;
case '+':
z+=x;
printf("%f add answer\n", z);
break;
case '-':
z-=x;
printf("%f minus answer\n", z);
break;
case '*':
z*=x;
printf("%f mutiply answer\n", z);
break;
case '/':
z/=x;
printf("%f divided answer\n", z);
break;
}
}
printf("end this program now\n");
return 0;
}
scanf会读取回车,你输入的时候注意输入格式了吗?
两次 scanf 调用的问题,建议把代码中 scanf("%f", &x); scanf("%c", &y); 都改为 scanf("%f %c", &x, &y); 。
发现有一篇博客也是同样的问题,并分析了原因:两次调用scanf函数的问题_@HDS的博客-CSDN博客_c语言第二次scanf有问题
应该写成scanf("%f%c",&x,&y); 这样应该就没问题了