我试图扫描字符串不寻常的行为,它需要有10与scanf函数
struct Person{
char name[MAX];
float score;
date_t dafe;
};
//MAX = 11
我使用的菜单,当输入的字符串少于10个字符,它工作正常一个最大长度但是当字符串更长时,它会遍历菜单并将字符串的其余部分(任何超过10个字符的字符)存储在数组中下一个学生的名称值中(创建一个新学生)。我究竟做错了什么?这是用scanf限制字符串的正确方法吗?
while(choice != 6){
printMenu();
scanf("%d", &choice);
switch(choice){
case 1 :
if(Size < MAX){
printf("Adding Person \n");
personList[Size] = addPerson();
Size++;
}else{
printf("Reached maximum size \n");
}
break;
case 2 : //Other Options
Person_t addperson(void){
person_t tempperson;
printf("Enter name> \n");
scanf("%10s", tempPerson.name);
printf("Enter date: day> \n");
scanf("%d", &person.date.day);
//more values
return tempPerson;
}
MAX_NAME_SIZE的值是多少? – chux
它被评论在第一个代码块中,11 – XcammanX
所以它是!在'struct student {...'之前建议'#define MAX_NAME_SIZE 11'。代码比评论更响亮。 – chux