C语言代码运行错误

believeforever6 2015-08-28 08:04:03
程序可运行但是运行后输入a和b的值之后程序就结束并没有机会输入字符ch,希望高手予以指导谢谢了!!

以下是源代码,求指导,谢谢了!


# include <stdio.h>

void action1(int x, int y);
void action2(int x, int y);//声明不带形参会出现错误
int main(void)
{
char ch;
int a, b;

printf("请输入你要处理的两个数据,中间以空格隔开。\n");
scanf("%d %d", &a, &b);
printf("请输入你要对数据的处理方式,若为加法请输入A ,若为乘法请输入B或者C。\n");
scanf("%c", &ch);

switch(ch)
{
case'A':
action1(a, b);
break;
case'B':
case'C':
action2(a, b);
break;
default:
putchar('\a');//输入其它字符发出警告

}

return 0;
}

void action1(int x, int y)
{
printf("x + y = %d\n",x+y);
}
void action2(int x, int y)//与action1中变量不冲突
{
printf("x * y = %d\n",x*y);
}
...全文
169 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zidane_2014 2015-09-07
  • 打赏
  • 举报
回复
因为换行符影响了下面的操作。 把换行符吃掉就行。
赵4老师 2015-09-07
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
//请今后要用
int c;
scanf("%c",&c);
//时,都改为
char s[2];
int c;
scanf("%1s",s);
c=s[0];
AllenZhan1225 2015-09-07
  • 打赏
  • 举报
回复
第一个问题:是将\n的值赋值个了 ch ,在 printf("请输入你要对数据的处理方式,若为加法请输入A ,若为乘法请输入B或者C。\n"); scanf("%c", &ch); 中间加getchar(); 也就是 printf("请输入你要对数据的处理方式,若为加法请输入A ,若为乘法请输入B或者C。\n"); getchar(); scanf("%c", &ch);
二班的码农 2015-08-28
  • 打赏
  • 举报
回复
如果是double就改成 const double EPSILON = 1E-15;
二班的码农 2015-08-28
  • 打赏
  • 举报
回复
引用 8 楼 believeforever6 的回复:
系统运行会报错呀 error: 'ESPILON' does not name a type
不好意思,写错了 const EPSILON = 1E-6; 改成 const float EPSILON = 1E-6;
zkj_123 2015-08-28
  • 打赏
  • 举报
回复
引用 3 楼 ant2012 的回复:
当你输入a b敲回车结束时,a b读完值后,将换行字符给了ch 这样,程序接着执行switch语句 解决办法:在输入字符前,加fflush(stdin);清空输入缓存区
正解
believeforever6 2015-08-28
  • 打赏
  • 举报
回复
系统运行会报错呀
error: 'ESPILON' does not name a type
二班的码农 2015-08-28
  • 打赏
  • 举报
回复
不过一般浮点型与0值的比较,需要设计精度的问题 const EPSILON = 1E-6; if(x >= -EPSILON && x <= EPSILON ) //x等于0
二班的码农 2015-08-28
  • 打赏
  • 举报
回复
else if (x = 0) x = 0 少了一个等号
believeforever6 2015-08-28
  • 打赏
  • 举报
回复
两种方法都是可以的,谢谢两位了。
还有个问题想请问一下,
# include <stdio.h>
# include <math.h>

int main(void)
{
float x, y;

printf("请输入该方程x的取值!\n");
scanf("%f",&x);

if (x > 0)
{
y = 4*x + sqrt(9);
}
else if (x = 0)
{
y = 0;
}
else
{
y = 4 + x ;
// 为什莫会出错,此处输入负数之后运行结果错误!!!
}

printf("y = %f\n",y);


return 0;
}
believeforever6 2015-08-28
  • 打赏
  • 举报
回复
谢谢了,我试试,看看结果!
二班的码农 2015-08-28
  • 打赏
  • 举报
回复
当你输入a b敲回车结束时,a b读完值后,将换行字符给了ch 这样,程序接着执行switch语句 解决办法:在输入字符前,加fflush(stdin);清空输入缓存区
dustpg 2015-08-28
  • 打赏
  • 举报
回复
引用 1 楼 dustpg 的回复:
一看就知道是因为回车的问题, lz需要调试啊. 在"switch(ch)"这个地方下个断点, 啥问题都解决了.. 很久没用标准输入了, 都忘记处理方式了. 试试
while(ch == '\n') scanf("%c", &ch);
需要初始化
char ch = '\n';
dustpg 2015-08-28
  • 打赏
  • 举报
回复
一看就知道是因为回车的问题, lz需要调试啊. 在"switch(ch)"这个地方下个断点, 啥问题都解决了.. 很久没用标准输入了, 都忘记处理方式了. 试试
while(ch == '\n') scanf("%c", &ch);

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧