c - scanf 的异常行为

标签 c scanf

<分区>

我有如下代码扫描矩阵,w - 矩阵宽度,h - 矩阵高度。

我正在使用 Visual Studio 2010。

每次我得到一个字符,它都会将 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/19337351/

相关文章:

c - 存储由零和一组成的大整数

c - Visual Studio 2012 C 访问代码错误

c - 在 c 中选择显示奇怪的行为

C 表达式在两个不同的编译器上的计算方式不同

c - 如何检查链表是否为空

c - 使用 scanf()、gets() 或 fgets() 函数?

c - 为什么只打印输入的第二个值?

C编程运算符

C套接字,recv丢失数据

c - 如何在 C 中正确 fscanf txt 文件