【问题标题】:Reading a 2-dimensional array of char in C在 C 中读取 char 的二维数组
【发布时间】:2013-04-21 14:32:06
【问题描述】:

我正在尝试读取 M*N 字符数组,但在打印数组时我得到了一些奇怪的字符。我无法弄清楚代码有什么问题,我在这里遗漏了什么?

int i,j,m,n;
char mat[10][10]
printf("N=");
scanf("%d", &n);
printf("M=");
scanf("%d", &m);
fflush(stdin);
// Read array elements, one by one
for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    {
        printf("mat[%d][%d]=", i+1, j+1);
        scanf("%c", &mat[i][j]);
        fflush(stdin);
    }
// Print matrix
putchar('\n');
for (i=0; i<n; i++);
{
    for (j=0; j<m; j++)
        printf("%2c", mat[i][j]);
    putchar('\n');
}

输入/输出示例:

N=2
M=2
mat[1][1]=1
mat[1][2]=A
mat[2][1]=2
mat[2][2]=B

 ╥ ⌠
1

【问题讨论】:

  • fflush(stdin); 是未定义的行为。这是否是您的问题取决于您使用的实现。还有,打印出了什么奇怪的字符?
  • 我添加了 fflush(stdin),因为有时输入流中仍有换行符,这可能会干扰 scanf()。
  • 我猜到了。但正如我所说,这是未定义的行为,它并不适用于任何地方。如果您不想接受空格作为输入,则可以在格式字符串中添加空格以跳过初始空格。如果这样做,如果您希望它可移植,则必须使用 getchar() 循环清除输入缓冲区直到换行。

标签: c arrays multidimensional-array char


【解决方案1】:

char mat[10][10] -> char mat[10][10];

for (i=0; i&lt;n; i++); -> for (i=0; i&lt;n; i++)

/* delete
for (i=0; i<(n-1); i++)
    for (j=0; j<i+1; j++)
        printf("%c ", mat[i][j]);
*/

【讨论】:

  • 是的,这就是问题所在……额外的分号。你让我删除的最后一个是另一个任务的一部分,我忘了把它拿出来,然后再粘贴到这里。
【解决方案2】:

你的

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

正在捕捉换行符。在格式的开头添加空格

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

【讨论】:

    【解决方案3】:
    #include<stdio.h>
    #include<string.h>
    
    int main (void)
    {
            int i,j,m,n;
            char mat[10][10];
            char ch;
            printf("N=");
            scanf("%d", &n);
            printf("M=");
            scanf("%d", &m);
            // Read array elements, one by one
            for (i=0; i<n; i++)
            {
                    for (j=0; j<m; j++)
                    {
                            printf("mat[%d][%d]=", i, j);
                            //Flush standard inputs
                            while ((ch = fgetc(stdin)) != EOF && ch != '\n')
                            {
                            }
                            mat[i][j]=getchar();
                            printf("\n");
                    }
            }
            printf("printing %d x %d matrix", n , m);
            // Print matrix
            putchar('\n');
            for (i=0; i<n; i++)
            {
                    for (j=0; j<m; j++)
                    {
                            printf("mat[%d][%d]=", i, j);
                            putchar(mat[i][j]);
                            printf("\n");
                    }
            }
    return (0);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 2012-12-30
      • 1970-01-01
      • 2017-08-23
      相关资源
      最近更新 更多