c语言中用scanf连续输入多个字符串的数据会重复为什么

#include"stdio.h" #include"windows.h"typedef struct s{ char roomnumber[4]; char name[6]; char sex[6]; char number[18]; char phone[11]; char year[4]; char month[2]; char day[2]; }Info; Info L[10];main(){ scanf("%s",L[0].roomnumber); scanf("%s",L[0].name); scanf("%s",L[0].sex); scanf("%s",L[0].number); scanf("%s",L[0].phone); scanf("%s",L[0].year); scanf("%s",L[0].month); scanf("%s",L[0].day); printf("%s ",L[0].roomnumber); printf("%s ",L[0].name); printf("%s ",L[0].sex); printf("%s ",L[0].number); printf("%s ",L[0].phone); printf("%s ",L[0].year); printf("%s ",L[0].month); printf("%s ",L[0].month); printf("%s\n",L[0].day);}

问题出在以下定义:
char name[6];
char number[18];
char phone[11];
char year[4];
char month[2];
char day[2];
字符数组name只能存储长度为5的字符串,因为结尾还有一个\0,而你的输入已经越界了,后面输入的内容将前面的\0覆盖,导致字符串输出异常,其他5个情况类似。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-14
你追问中的那一行不能改成gets(n);,因为n是int型变量而不是数组名或数组指针!gets是专门接收字符串的函数,而scanf可以接收任何类型的变量,二者差异不小。
第2个回答  2019-12-06
你追问中的那一行不能改成gets(n);,因为n是int型变量而不是数组名或数组指针!gets是专门接收字符串的函数,而scanf可以接收任何类型的变量,二者差异不小。
相似回答