
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的字数,就很正常? 展开
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的字数,就很正常? 展开
7个回答
展开全部
出错的时候要吧键盘缓冲区刷新
要不然没都出来的东西一直留在里面
每次都出错
因为scanf的时候你要的输入就是数字啊
所以你输范围内的数字必然是正常的(你还指望他不正常么)而且读完就会把缓冲区清掉
要不然没都出来的东西一直留在里面
每次都出错
因为scanf的时候你要的输入就是数字啊
所以你输范围内的数字必然是正常的(你还指望他不正常么)而且读完就会把缓冲区清掉
展开全部
对scanf("%d",&number);要有所判断
if(scanf("%d",&number)!=1) break;
scanf是有返回值的,返回值就是正确读入变量的个数。number是int型,输入字符或者字母时,
number没有正确读入,所以是个随机数,这样switch捕获number信息直接跳到defalt那里.
if(scanf("%d",&number)!=1) break;
scanf是有返回值的,返回值就是正确读入变量的个数。number是int型,输入字符或者字母时,
number没有正确读入,所以是个随机数,这样switch捕获number信息直接跳到defalt那里.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字母或者符号是把它对应的一个字节长度的asc ii码值传转换成int递给你的number变量了。大部分的符号和所有的字母的asc ii码值都比1、2大,因为所有asc ii字符好像是256个吧,从0开始到255,1、2所代表的字符还不一定可以输入....不符合1和2,就去default了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的 f 的字符类型是 int型,你输入字符或者符号就不是int型了,所以 f 始终都会是1 ,因此会不断的循环。你应该对输入的字符类型没有进行判断处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用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下我也没写过什么。
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下我也没写过什么。
追问
谢谢您的解答,但你答不对题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为scanf("%d",&number);接收到字母或者符号后传到部分到&number里,但由于linux c语言的int类型与char类型的存储大小不同,所以stdin流一直不为空,如果要达到你所说的效果,要强行清空stdin流,命令如下:fflush(stdin);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询