C语言中关于字符型的奇怪问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 20:44:42
首先声明,我不是C初学者,但是前几天碰到一个奇怪的问题,大家帮我分析一下怎么回事,先谢谢了,以下程序是为了突出问题而写的简单程序,大家在自己的机子上编译一下,看字符'c'能不能输入
#include "stdio.h"
int main()
{
char c='+';
int a,b;
printf("请输入两个操作数:\n");
scanf("%d%d",&a,&b);
printf("请输入操作类型:\n");
scanf("%c",&c);

switch(c)
{
case '+':
printf("结果是:%d\n",a+b);
break;
case '-':
printf("结果是:%d\n",a-b);
break;
case '*':
printf("结果是:%d\n",a*b);
break;
case '/':
printf("结果是:%d\n",a/b);
break;
default:
printf("操作符非法\n");
}

return 0;

}

楼主你好,关于你问的这个问题在我初学C语言的时候也遇到过,不仅是一个人遇到,这是很多初学者都会遇到的问题~,当然,我不是说楼主大哥你是初学者~~~呵呵~~~~~~~这个问题曾经麻痹了很多人,开始我也是不知道是什么原因,直到一次偶然的机会我才知道问题的所在~`
出错原因如下:
当你输入数据后 回车,数据才被函数“scanf()”读入,问题
就出在这个“回车”上;在C里面 回车 键是当两个字符来用的:即
“回车”和“换行”;这样一来,问题就来了;当你紧接着在
“scanf()”后面再来一句“scanf()”读入一个字符的时候,
此时在第二个“scanf()”里面读入的不是你输入的那个字符~~~ 而是那个使人忽略的 “回车”字符;
当然,要是你第二句“scanf()”不是输入字符而是输入数据的 话, 那就没有此问题出现。
解决的办法是在第二个“scanf()”语句前加一句getchar();
此处的getchar();就是用来吞噬掉前面的“回车”。
其实C语言不仅仅只有这个使人麻痹的问题,还有许多 是你自认为是对的语句,在你运行的时候会出现一些莫名其妙的错误,使人防不甚防。这又是C语言的一个不足之处。

因为你要输入的是字符,在scanf("%d%d,&a,&b);执行输入数字按回车键后,换行符会被直接认为是要输入的字符,所以应在scanf("%c",&c);紧接着前面加一条防治发生此种错误的getchar();接受换行符.
如果要输入的是非字符,则不会出现此类问题。

printf("请输入两个操作数:\n");
scanf("%d%d",&a,&b);
printf("请输入操作类型:\n");
getchar();
scanf("%c",&c);

一个函数好象只能出现一个SCANF,字符和字符串可以用getchar()和gets命令,而且要放在scanf前面执行.
要么就把两个命令组合