【C/C++】【輸入】關於scanf:輸入空格,多次使用


一、C/C++中帶空格字符串的輸入
C++中的cin和C中的scanf都是遇到空格或回車結束。
如果要讓scanf接收空格,可以用讀入字符集合的方式。%[]

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

二、scanf的多次輸入
scanf無法連續使用,因為緩沖區不足。
1.stdin默認緩沖區給了4k。
2.scanf()接受一個字符輸入,按下回車后換行符保留在緩沖中,第二次輸入時,緩沖符合先進先出,系統遇到第二個scanf時,緩沖區會先給出換行符。
所以之后的輸入是無效的。
改進方法:
使用fflush(stdin),釋放相應內存,提供下一次輸入。

【整體代碼】

int main()
{
    //輸入 五行輸入 帶空格
    for (int i = 0; i < 5; i++)
    {
        scanf("%[^\n]",s);
        for (int j = 0; j < 5; j++)
        {
            a[i][j] = s[j];
        }
        fflush(stdin); //釋放內存
    }
    printf("out\n");
    //printf("%s",a[0]);
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            printf("%c",a[i][j]);
        }
        printf("\n");
    }
    
    system("pause");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM