Scanf函数不等待字符串输入

时间:2017-01-20 12:40:36

标签: c string scanf

在此代码中,为前两个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;
}

1 个答案:

答案 0 :(得分:5)

你是什么意思:

scanf("%50[^ ]s",kog);

如果要扫描直到打印新行,请尝试:

scanf(" %49[^\n]",kog);

顺便提一下,宽度指示符1总是小于字符串的大小。这是为了避免覆盖终止空字符。所以提到49而不是50作为宽度说明符。

来自cppreference

  

如果使用宽度说明符,则仅匹配宽度。除了匹配的字符外,始终存储空字符(因此参数数组必须具有至少宽度+ 1个字符的空间)。

另请注意,]处的扫描集转换已完成。结构是"%49[…]",这就是全部。一般的误解是扫描集应该跟s

并在%中的scanf()之前提供一个空格,以避免使用在上一个条目末尾输入的新行字符。