您的位置:首页 > 编程语言 > C语言/C++

c语言常出错误

2016-03-03 20:18 381 查看
array size missing 表示数组在定义时未说明长度,改成自己满意的长度即可

来看两组代码的不同之处

printf("姓名是\n"); scanf("%c",&yonghu[i].name); getchar();

printf("电话号码是\n"); scanf("%d",&yonghu[i].tel);getchar();

printf("家庭住址是\n"); scanf("%c",&yonghu[i].address);getchar();

printf("性别是\n"); scanf("%c",&yonghu[i].sex);getchar();

printf("年龄是\n"); scanf("%d",&yonghu[i].age);getchar();

printf("姓名是\n"); scanf("%c",&yonghu[i].name);

printf("电话号码是\n"); scanf("%d",&yonghu[i].tel);

printf("家庭住址是\n"); scanf("%c",&yonghu[i].address);

printf("性别是\n"); scanf("%c",&yonghu[i].sex);

printf("年龄是\n"); scanf("%d",&yonghu[i].age);

两组代码唯一的区别就是第一次出现的每一行代码都存在着一个getchar函数,虽然两组代码都不会报错(error和warning),但是,他们执行的结果是截然不同的,第一组代码的结果能让我们满意,但是第二组代码的结果则是屏幕上先出现"姓名是",然后"电话号码是",然后"家庭住址是""性别是""年龄是"一起跳出来了,我一开始并没有注意到回车在这其中的作用,后来经朋友提醒才意识到,是回车出了问题

在这里要感谢这篇文章:http://blog.csdn.net/chenglibin1988/article/details/8755626,这里面介绍了这个问题的出现,原始就是我们在"姓名是"这行文字打出后开始输入姓名,然后回车,回车代表的是这个程序的触发,但其实回车也是一个字符,就是空字符,我们在读取完姓名后,由于电话号码是整型数据,所以这个回车对其并没有影响,输入完电话号码后的回车,会影响下面的家庭住址和性别的输入,正常情况下,家庭住址会被赋上空格字符,不影响性别的输入,但是,我的电脑有一些问题,一次回车在程序中产生了两次的效果,uishi性别也被略过去了,只剩下年龄的输入

解决方法:

1,在每一个scanf函数后面加一个getchar().这个函数会"吃掉"你输入的空格键,让其不再对程序产生不必要的影响

2,并没有实践过的做法,在scanf函数中加上换行符\n,根据scanf函数的定义,只有scanf函数能产生这个效果,原因未知.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: