linux c语言的问题

intnumber,f=1;while(f!=0){scanf("%d",&number);switch(number){case1:printf("1\n");brea... int number,f=1;
while(f!=0)
{
scanf("%d",&number);
switch(number)
{
case 1:printf("1\n");break;
case 2:printf("2\n")f=0;break;
default:printf("error!");break;
}
}
为什么输入字母或者符号时,就会不断的循环“error!”???
那为什么输入number>=0的字数,就很正常?
展开
 我来答
你泪料激恋6
2011-03-08 · TA获得超过2132个赞
知道小有建树答主
回答量:686
采纳率:0%
帮助的人:1015万
展开全部
出错的时候要吧键盘缓冲区刷新
要不然没都出来的东西一直留在里面
每次都出错

因为scanf的时候你要的输入就是数字啊
所以你输范围内的数字必然是正常的(你还指望他不正常么)而且读完就会把缓冲区清掉
有钱买不起房子
2011-03-04 · TA获得超过4326个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2134万
展开全部
对scanf("%d",&number);要有所判断
if(scanf("%d",&number)!=1) break;
scanf是有返回值的,返回值就是正确读入变量的个数。number是int型,输入字符或者字母时,
number没有正确读入,所以是个随机数,这样switch捕获number信息直接跳到defalt那里.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
handsoul
2011-03-04 · TA获得超过955个赞
知道小有建树答主
回答量:500
采纳率:0%
帮助的人:776万
展开全部
字母或者符号是把它对应的一个字节长度的asc ii码值传转换成int递给你的number变量了。大部分的符号和所有的字母的asc ii码值都比1、2大,因为所有asc ii字符好像是256个吧,从0开始到255,1、2所代表的字符还不一定可以输入....不符合1和2,就去default了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Julian99
2011-03-04 · TA获得超过1221个赞
知道小有建树答主
回答量:1194
采纳率:0%
帮助的人:1233万
展开全部
因为你的 f 的字符类型是 int型,你输入字符或者符号就不是int型了,所以 f 始终都会是1 ,因此会不断的循环。你应该对输入的字符类型没有进行判断处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户36303
2011-03-05 · 超过35用户采纳过TA的回答
知道答主
回答量:177
采纳率:100%
帮助的人:0
展开全部
用vim做编辑器,或者用gedit,都有语法着色功能,写好后保存成.c或.cpp文件,然后命令行下用gcc或g++编译,调试可以用gdb。

gcc默认生成可执行文件叫a.out,好像是……命令行下用.\a.out运行

设计到系统调用的函数,和windows下是不同的,具体看本linux C编程的书就好了。

1,图形界面下先进入终端,在菜单里找,文字界面就不用了。
2,输入vim hello.c,回车
3,打开了vim,按i开始输入:
#include<stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
4,按ESC,再按shift+分号,输入wq(保存退出),回车
5,输入gcc hello.c,编译
6,输入./a.out运行

lee@lee-laptop:~/hello$ vim hello.c
lee@lee-laptop:~/hello$ ls
hello.c
lee@lee-laptop:~/hello$ gcc hello.c
lee@lee-laptop:~/hello$ ls
a.out hello.c
lee@lee-laptop:~/hello$ ./a.out
hello world!

第二步没有vim的话就用vi hello.c
没有gcc的话,要装一个,一般只有ubuntu默认没装,放入光盘或连接网络,用apt-get install build-essential命令安装。

剩下的自己摸索把,linux下我也没写过什么。
追问
谢谢您的解答,但你答不对题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友de5ed5ef2
2011-03-04 · 超过10用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:33.2万
展开全部
因为scanf("%d",&number);接收到字母或者符号后传到部分到&number里,但由于linux c语言的int类型与char类型的存储大小不同,所以stdin流一直不为空,如果要达到你所说的效果,要强行清空stdin流,命令如下:fflush(stdin);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式