我正在编写一个代码,在循环之间多次使用空格分隔的字符串输入.我看到它%[^\n]s在循环中没有工作但是%[^\n]%*c确实如此.我的问题是为什么%[^\n]s不起作用.这是我的代码:
#include<stdio.h>
main(){
while(1){
char str[10];
scanf("%[^\n]s",str);
printf("%s\n",str);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
格式说明符%[^\n]表示"读取包含任何字符的字符串,直到找到换行符".换行本身不会被消耗掉.找到换行符后,它将保留在输入流中以进行下一次转换.
格式说明符的%*c意思是"只读一个字符并丢弃它".
所以组合
scanf( "%[^\n]%*c", str );
Run Code Online (Sandbox Code Playgroud)
表示"读取字符串直到换行符,将字符串放入str指向的内存中,然后丢弃换行符".
给定格式%[^\n]s,s它不是转换说明符的一部分.该格式表示"读取字符直到找到换行符,然后下一个字符应为s".但是下一个角色永远不会是一个s,因为下一个角色永远是新线.所以s那种格式没有任何意义.