c语言连续输入多个字符怎么弄,c语言中的连续输入问题

(这个是我写的,我觉得博文搬家有点麻烦,然后就复制粘贴过来了。)

1.具体问题(问题的解答还有待进一步的完善)

(1) 完整代码:

#include "stdio.h"

struct date

{

int month;

int year;

int day;

};

struct student

{

int num;

char name[16];

struct date birthday;

};

void main()

{

struct student student1;

printf("please input the data of the student\n");

printf("num \tname \n");

scanf("num is %d,name is %s",&student1.num,student1.name);

//getchar();

fflush(stdin);

printf("put into the birthday\n");

printf("the day \t the month \t the year\n");

scanf("%d%d%d",&(student1.birthday.day),&(student1.birthday.month),&(student1.birthday.year));

printf("the num is %d ,and the name is %s",student1.num,student1.name);

}

第二类代码:

仅标黄出发生变化

scanf(

"%d\t %s",&student1.num,student1.name);

//

fflush(stdin);

(2)问题描述

这只是代码部分,当我们运行程序后,如果我们在程序一中进行如下的输入

9029d4f43143ff3379813d703abbc9ee.png  

我们会看到,根本无法实现出生年月的输入。

2.错误分析

我们对这样的错误显示进行如下分析

首先,我们没有按照程序中规定的格式进行输入。

其次,在这段程序中有连个scanf输入,毫无疑问,第一个程序中输入的内容放到对应的变量中时,比然后残留一个enter。因为enter的存在使得第二个需要输入三个int的那段代码根本无法运行。

3,问题解决

如果,我们按照程序中规定的输入方法完成第一次的输入。在第二次进行scanf是不会有问题的。

d65ab8653ba42b71254b28b9bcc3b39e.png

而且此时的程序中并没有fflush(stdin);这就说明了一个问题,在源文件的编译过程中,scanf("num is %d,name is %s",&student1.num,student1.name)被标色的部分编译方式比较特殊。(特殊之处目前还不清楚)如果我们不能按照程序中指定的方式输入的话,我们可以在第二次scanf时添加fflush(),使用该函数后,虽然能实现第二次scanf的输入,但是第一次输入内容的赋值情况仍然是有问题的。

4. 总结

1)我们要保证运行时的输入和程序中指定的输入保持一致

2)缓存区中分配给程序输入的内容有限,如果多次输入,一定要记住使用fflush(stdin),释放相应的内存,一共下一次输入。尤其在以后出现多次字符串的输入时,这个问题将会更加明显。

参考内容

(scanf无法连用,主要是因为缓冲区不足,提交缓冲就好了。stdin 默认的缓冲区给了4k  加上一些系统的东西. 4k很快就不够用了。另一个原因是,第一scanf()接受一个字符输入,当你输入一个字符后按下回车,只有你输入的那个字符被赋给了a,而剩下的一个换行符还保留在缓冲中,当第二次输入时 无论你输入的什么字符,都是无效的,缓冲就如堆栈,符合先进先出原则,既然你缓冲中先前有个换行符,那么系统在遇见第二个scanf时自动会将换行符赋给 b,所以输入的东西都是无效的....所以 fflush 一下就可以解决此问题。

)