【发布时间】:2018-03-09 03:20:55
【问题描述】:
我有如下代码,它扫描一个矩阵,w - 矩阵的宽度,h - 矩阵的高度。
我正在使用 Visual Studio 2010。
每次我得到一个 char 时,它都会将 j 增加 2(我设置了断点并开始了解这种行为)。
int w = 0, h = 0;
char map[21][21];
int i,j;
scanf("%d%d", &w, &h);
for(i = 1; i <= h; ++i){
for(j = 1; j <= w; ++j){
//fflush(stdin);
scanf("%c",&map[i][j]);
//fflush(stdin);
}
}
这背后的原因是什么?
在扫描时,我给出值,w = 7,h = 5。
我的代码中没有发现任何错误....请帮助我。
【问题讨论】:
-
fflush(stdin)有未定义的行为,不要使用它! -
你用的是什么输入法?如果我给它
7 5abcdefghijklmnopqrstuvwxyzABCDEFGHI之类的东西(这似乎是预期的),它会按预期工作。也许您正在尝试读取某种不同格式的数据? -
感谢 fflush(stdin) 行为,我不知道。但仍然面临这个问题。
-
@P0W:如果您在 POSIX 派生系统上运行,
fflush(stdin)具有未定义的行为。如果您在 Windows 派生系统上运行,则该行为由 Microsoft 记录;它会丢弃输入缓冲区中已有的所有数据。 -
数组索引从
0开始,在 C 中。