求解答,每次输入主函数里的while循环完后需要换行再次输入相应的标识符才行。这个现象的原因是什么?该如何解决?
#include <stdio.h>
void add(void);
void subtract(void);
void multiply(void);
void divide(void);
void test(void);
void empty(void);
void empty_(void);
char get_first(void);
float x, y, up_A, up_B, up_C, up_D;
int main(void)
{
char ch;
printf("根据提示选择需要的运算\n");
printf("选择需要的算法,运算完成输入q退出。\n");
printf("A.加法 B.减法\n");
printf("C.乘法 D.除法\n");
while((ch = get_first()) != 'q'){
switch(ch){
case 'A': add();
break;
case 'B': subtract();
break;
case 'C': multiply();
break;
case 'D': divide();
break;
default: //printf("无相关标识符\n");
break;
}
//printf("本次运算完成,需要其他运算则输入相应标识符。退出输入q\n");
}
return 0;
}
void add(void)
{
printf("请输入两个数字空格隔开, 点击Enter开始运算\n");
test();
up_A = x + y;
printf("两数之和=%.2f\n", up_A);
}
void subtract(void)
{
printf("请输入两个数字空格隔开(数值大的作为被减数),点击Enter开始运算\n");
test();
if (x >y)
up_B = x - y;
else
up_B = y - x;
printf("两数之差=%.2f\n", up_B);
}
void multiply(void)
{
printf("请输入两个数字空格隔开, 点击Enter开始运算\n");
test();
printf("两数的乘积=%.2f\n", up_C = x * y);
}
void divide(void)
{
printf("请输入两个数字空格隔开(前者为被除数后者为除数), 点击Enter开始运算\n");
test();
while(y == 0){
printf("除数不可为0,请重新输入!\n");
scanf("%f", &y);
}
printf("两数之商=%.2f\n", up_D = x / y);
}
void test(void)
{
if (scanf("%f", &x) == 1){
if (scanf("%f", &y) == 1){
/*up = x + y;
printf("和=%.2f\n", up);*/
}
else{
empty_();
printf("第二个数存在错误,请重新输入第二个数\n");
scanf("%f", &y);
/*up = x + y;
printf("和=%.2f\n", up);*/
}
}
else{
empty();
if(scanf("%f", &y) == 1){
printf("第一个数据存在错误,请重新输入\n");
while(scanf("%f", &x) != 1)
printf("数据错误请重新输入\n");
}
else{
empty_();
test();
}
}
}
void empty(void)
{
while(getchar() != ' ') //清空字符至空格
continue;
}
void empty_(void)
{
while(getchar() != '\n') //清空字符至换行
continue;
}
char get_first(void)
{
char ch,l;
ch = getchar();
while((l = getchar()) != '\n')
continue;
/*if(ch == '\n' || ch == ' ')
get_first();*/
return ch;
}
因为你的get_first要求输入换行符才退出循环
/n是换行的意思呀,敲了回车才能换行呀。
确切的说是又循环了一次
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632