C++ scanf没有';I don’我不能按预期接受chars
使用以下代码:C++ scanf没有';I don’我不能按预期接受chars,c++,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++){
#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;
}
我期望得到以下结果:
*........*......
它是除空白外的原始输入。
但实际产出是:
*...
....
.*..
有什么问题吗?
scanf
与%c
一起使用不使用前导空格。因此,当您键入时:
*...
按回车键,实际上是五个字符。这意味着matrixa[1][0]
最终会保留\n
字符。然后,当你去输出你的矩阵时,它显示为一个换行符出现在输出中
要解决所有这些问题,请将格式字符串更改为
“%c”
,这意味着放弃前导空格。(这也将解决从%d%d
的输入中删除尾随换行符的问题)。C中没有
标题;你问的是C++问题。不要双重标记。我认为这是一个c
问题,而不是c++
,更具体地说,这是一种c99
风格。我只是编辑了这个问题,将
替换为
,应该足够了。@armnotstrong请阅读。标签应该与原海报实际使用的编译器相符合,而不是你认为他应该使用的是什么。@ MtMcNababb,不,我认为这是C问题而不是C++问题,因为在这个问题上不需要C++特性。@ ARMNOSTRANK读链接线程,很多人都贡献了。重要的不仅仅是你的个人意见
*...