使用以下代码:
#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
我期待以下输出:
*........*......
除白色空间外的原始输入。 但实际输出是:
*...
....
.*..
问题是什么?
答案 0 :(得分:5)
scanf
的 %c
不会消耗前导空格。所以当你输入:
*...
然后按Enter键,实际上是五个字符。这意味着matrixa[1][0]
最终持有\n
字符。然后,当您输出矩阵时,它会显示为输出中出现的换行符。
要解决所有这些问题,请将格式字符串更改为" %c"
,这意味着要丢弃前导空格。 (这也将解决从%d %d
的输入中吃掉尾随换行符的问题。