【发布时间】:2018-06-23 10:20:22
【问题描述】:
我正在使用 GCC 编译器
我也想扫描白色字符,所以我使用了scanf("%[^\n]s",&name),效果很好。
说代码是
void main(){
char name[20];
scanf("%[^\n]s",&name);
printf("%s",name);
}
但是当我尝试将它与结构变量一起使用时,该语句不再起作用。
struct book { char name[20];};
main(){
struct book buk[10];
int i;
for(i=0;i<3;i++)
{
printf("Enter name of book %d",i+1);
scanf("%[^\n]s",&buk[i].name);}
}
scanf 语句只是不执行。
但如果我使用简单的scanf("%s",&name);,它就可以正常工作。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
"简单的
scanf("%s",&name);它工作得很好。" 它似乎工作得很好。scanf("%s",&name);调用未定义的行为。%s需要char*,而&name不是。 -
你有一个额外的
s。你想要"%[^\n]",而不是"%[^\n]s"。 (但是正如用户 3121023 指出的那样,您确实想要"%19[^\n]",或者可能是" %19[^\n]"。或者可能完全跳过scanf,并改用fgets。) -
您应该检查来自
scanf()的返回值,以确保它符合您的预期。