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函数能产生这个效果,原因未知.....
来看两组代码的不同之处
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函数能产生这个效果,原因未知.....
相关文章推荐
- c++通过类名动态创建对象
- C++: cin.get()与cin.getline()
- 习题8.3 编写一个函数,其唯一的形参和返回值都是istream&类型.该函数一直读取到到大文件结束符为止,,,,,,并返回该流
- C++构造函数实例讲解
- ROS消息发布器与接收器(C++)注意事项
- 菜鸟进阶: C++实现KNN文本分类算法
- c++
- C语言++a与a++的实现机制与操作符结合优先级
- 【C++学习之路】组合类的构造函数
- c++构造函数/复制构造/赋值函数
- C++ lambda 表达式传递的变量默认不可变
- 一个C++线程池的实现
- [LeetCode] 034. Search for a Range (Medium) (C++/Java)
- 算法代码实现之二分法查找,C/C++实现
- C语言学习-编程启蒙思想与算法初识
- python调用c/c++方式示例(修改整理)
- c++ 总结小基础
- C#处理VC++动态库回调函数的字符串指针参数(传递二进制流)
- 二维数组作为函数参数传递剖析(C语言)总结
- C++不同进制整数