雷雨晨

来自软件实验室
少人讨论 | 贡献2016年3月5日 (六) 15:05的版本 遇到的问题

跳转至: 导航搜索

个人介绍

2015级 电子信息科学与技术

学习过程与成果

我的博客

遇到的问题

在编写c语言程序的时候,碰到如下问题

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函数能产生这个效果,原因未知.....