scanf没有按预期接受字符

时间:2015-01-20 03:37:14

标签: c++

使用以下代码:

#include <cstdio>

using namespace std;

char matrix[101][101];
int row, col, case_num = 1;
int main() {
    while (scanf("%d %d", &row, &col) && row!=0 && col!=0) {
        for (int i=0; i<row; i++){
            for (int j=0; j<col; j++){
                scanf("%c", &matrix[i][j]);
            }
        }

        for (int i=0; i<row; i++){
            for (int j=0; j<col; j++){
                printf("%c", matrix[i][j]);
            }
        }
    }
    return 0;
}

当我输入这些字符时:

4 4
*...
....
.*..
....
0 0

我期待以下输出:

*........*......

除白色空间外的原始输入。 但实际输出是:

*...
....
.*..

问题是什么?

1 个答案:

答案 0 :(得分:5)

带有scanf

%c 会消耗前导空格。所以当你输入:

*...

然后按Enter键,实际上是五个字符。这意味着matrixa[1][0]最终持有\n字符。然后,当您输出矩阵时,它会显示为输出中出现的换行符。

要解决所有这些问题,请将格式字符串更改为" %c",这意味着要丢弃前导空格。 (这也将解决从%d %d的输入中吃掉尾随换行符的问题。