问题出在第四个
scanf
。请帮助我理解scanf("%[^\n]%*c",c)
的用法。
char a; char b[30]; char c[50];
scanf("%c", &a);
scanf("%s",b);
scanf("\n");
scanf("%[^\n]%*c",c);
printf("%c \n",a);
printf("%s \n",b);
printf("%s \n",c);
return 0;
%[
开始匹配一组字符。
以 ^
反转开始该组匹配,匹配该组中未找到的任何字符。
]
终止集合。效果:
%[^\n]
匹配尽可能多的字符,即不是换行符。
%c
匹配任何字符。添加
*
(如
%*c
)可防止
scanf
将该字符分配给任何变量。总体效果是
"%[^\n]%*c"
读取尽可能多的字符,将这些字符存储在缓冲区中,直到到达换行符。然后它消耗并丢弃换行符。