一、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");
}