C:扫描输入中的逻辑错误

时间:2013-05-04 15:00:30

标签: c io

我有以下读取字符矩阵并将其打印回来的实现。它运行正常,但是当我为它提供矩阵时,它会等待另一个字符,然后正确输出矩阵。如何修复它以便我不需要输入另一个字符?

示例输入

3 4
0001
0110
1110

示例输出

0001
0110
1110

我的代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, m; /* n, m - dimensions of matrix */
    int i, j; /* i, j - iterators */
    char **matrix; /* matrix - matrix input */
    scanf ("%d %d\n", &n, &m);
    matrix = (char **) malloc (sizeof (char *) * n);
    for (i = 0; i < n; ++i)
    {
        matrix[i] = (char *) malloc (sizeof (char) * m);
    }
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < m; ++j)
        {
            scanf ("%c ", &matrix[i][j]);
        }
    }
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < m; ++j)
        {
            printf ("%c", matrix[i][j]);
        }
        printf ("\n");
    }
}

提前致谢。

4 个答案:

答案 0 :(得分:1)

尝试省略scanf中的空格(“%c”)。终端可能正在期待输入空间

答案 1 :(得分:1)

将空格放在 %c之前。如果在%c之后有空格,则scanf()将继续读取并忽略所有空格。因此,您被迫输入非空格字符。

变化:

    scanf ("%c ", &bitmap[i][j]);

为:

        scanf (" %c", &bitmap[i][j]);

答案 2 :(得分:0)

在打印字符之前,使用fflush(stdout);可能有所帮助。 printf()scanf()在使用时可能会出现问题。

答案 3 :(得分:0)

        scanf ("%c", &bitmap[i][j]);
    }
    getchar();