当前位置:  开发笔记 > 编程语言 > 正文

Scanf函数不等待字符串输入

如何解决《Scanf函数不等待字符串输入》经验,为你挑选了1个好方法。

在此代码中,在为前两个scanf函数提供输入之后.输出自动显示.我学习了这种形式的scanf for string.但它并没有特别等待它.有什么建议 ?

#include 

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;
}

Cherubim.. 5

你是什​​么意思:

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

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

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

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

cppreference:

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

另请注意,扫描集转换已完成].结构就是"%49[…]"这样.一般的误解是扫描装置应该遵循s.

并在之前提供一个空格%,scanf()以避免消耗在前一个条目末尾输入的新行字符.



1> Cherubim..:

你是什​​么意思:

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

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

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

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

cppreference:

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

另请注意,扫描集转换已完成].结构就是"%49[…]"这样.一般的误解是扫描装置应该遵循s.

并在之前提供一个空格%,scanf()以避免消耗在前一个条目末尾输入的新行字符.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有