在此代码中,在为前两个scanf函数提供输入之后.输出自动显示.我学习了这种形式的scanf for string.但它并没有特别等待它.有什么建议 ?
#includeint 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; }
Cherubim.. 5
你是什么意思:
scanf("%50[^ ]s",kog);
?
如果要扫描直到打印新行,请尝试:
scanf(" %49[^\n]",kog);
顺便提一下,宽度指示符1总是小于字符串的大小.这是为了避免覆盖终止空字符.所以提到49而不是50作为宽度说明符.
从cppreference:
如果使用宽度说明符,则仅匹配宽度.除了匹配的字符外,始终存储空字符(因此参数数组必须具有至少宽度+ 1个字符的空间).
另请注意,扫描集转换已完成]
.结构就是"%49[…]"
这样.一般的误解是扫描装置应该遵循s
.
并在之前提供一个空格%
,scanf()
以避免消耗在前一个条目末尾输入的新行字符.
你是什么意思:
scanf("%50[^ ]s",kog);
?
如果要扫描直到打印新行,请尝试:
scanf(" %49[^\n]",kog);
顺便提一下,宽度指示符1总是小于字符串的大小.这是为了避免覆盖终止空字符.所以提到49而不是50作为宽度说明符.
从cppreference:
如果使用宽度说明符,则仅匹配宽度.除了匹配的字符外,始终存储空字符(因此参数数组必须具有至少宽度+ 1个字符的空间).
另请注意,扫描集转换已完成]
.结构就是"%49[…]"
这样.一般的误解是扫描装置应该遵循s
.
并在之前提供一个空格%
,scanf()
以避免消耗在前一个条目末尾输入的新行字符.