在此代码中,为前两个scanf函数提供输入后。输出自动显示。我学习了这种形式的scanf for string。但它并没有特别等待它。有什么建议 ?
#include <stdio.h>
int main()
{
int p;
int q;
char kog[50];
scanf("%d",&p);
scanf("%d",&q);
scanf("%50[^ ]s",kog);
printf("%d %d %s",p,q,kog);
return 0;
}
答案 0 :(得分:5)
你是什么意思:
scanf("%50[^ ]s",kog);
?
如果要扫描直到打印新行,请尝试:
scanf(" %49[^\n]",kog);
顺便提一下,宽度指示符1总是小于字符串的大小。这是为了避免覆盖终止空字符。所以提到49而不是50作为宽度说明符。
来自cppreference:
如果使用宽度说明符,则仅匹配宽度。除了匹配的字符外,始终存储空字符(因此参数数组必须具有至少宽度+ 1个字符的空间)。
另请注意,]
处的扫描集转换已完成。结构是"%49[…]"
,这就是全部。一般的误解是扫描集应该跟s
。
并在%
中的scanf()
之前提供一个空格,以避免使用在上一个条目末尾输入的新行字符。