• 【C/C++】【输入】关于scanf:输入空格,多次使用


    一、C/C++中带空格字符串的输入
    C++中的cin和C中的scanf都是遇到空格或回车结束。
    如果要让scanf接收空格,可以用读入字符集合的方式。%[]

    char a[100];
    scanf("%[^
    ]",s);
    //%[]:读入此集合内所限定的字符。**一旦遇到不是此集合内的字符就停止。**
    //%[^ ]:^表示非
    

    二、scanf的多次输入
    scanf无法连续使用,因为缓冲区不足。
    1.stdin默认缓冲区给了4k。
    2.scanf()接受一个字符输入,按下回车后换行符保留在缓冲中,第二次输入时,缓冲符合先进先出,系统遇到第二个scanf时,缓冲区会先给出换行符。
    所以之后的输入是无效的。
    改进方法:
    使用fflush(stdin),释放相应内存,提供下一次输入。

    【整体代码】

    int main()
    {
        //输入 五行输入 带空格
        for (int i = 0; i < 5; i++)
        {
            scanf("%[^
    ]",s);
            for (int j = 0; j < 5; j++)
            {
                a[i][j] = s[j];
            }
            fflush(stdin); //释放内存
        }
        printf("out
    ");
        //printf("%s",a[0]);
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                printf("%c",a[i][j]);
            }
            printf("
    ");
        }
        
        system("pause");
    }
    
  • 相关阅读:
    建造者模式
    模板方法模式
    抽象工厂模式
    工厂方法模式
    Josephus环问题
    单例模式
    求两个数的最大公约数
    Nginx的安装与部署
    左京大夫显辅
    java 调用第三方系统时的连接代码-记录
  • 原文地址:https://www.cnblogs.com/kinologic/p/13957927.html
Copyright © 2020-2023  润新知