gpt4 book ai didi

c - scanf 的异常行为

转载 作者:行者123 更新时间:2023-11-30 16:50:41 24 4
gpt4 key购买 nike

我有如下代码扫描矩阵,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。

我的代码中没有看到任何错误......请帮助我。

最佳答案

该问题是由于 scanf 留下的 '\n' 字符(按 Enter 时)造成的。
吃掉这些换行符的一种方法是在 scanf 中的 %c 之前放置一个 ' '

 scanf(" %c",&map[i][j]);  
^
|
space

另一种方法是使用循环通过 getchar() 吃掉所有 \n

  int ch;
while((ch=getchar())!='\n' && ch != EOF );

关于c - scanf 的异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42104569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com