c中二维数组中整数的连续间隔输入

标签 c arrays input integer 2d

在 C 语言的二维数组中,输入是一组连续的整数,每行之间用空格分隔。我应该编写什么代码?

输入是:

0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

我用的是这个:

int i, k;
for (i = 0; i < 26; i++) {
    for (k = 0; k < 52; k = k + 2) {
        scanf("%d", &Arr[i][k]);
    }
}

最佳答案

您的代码几乎是正确的:

  • 您应该仅将 k 增加 1,并停止在 26
  • 您应该检查 scanf 返回值。

试试这个:

    int Arr[26][26];
    int i, k, error = 0;

    for (i = 0; i < 26; i++) {
        for (k = 0; k < 26; k++) {
            if (scanf("%d", &Arr[i][k]) != 1) {
                error = 1;
                break;
            }
        }
        if (error)
            break;
    }
    if (error) {
        // the matrix was not correctly parsed, 
        // issue an error message, clean up and exit
    }

替代解决方案将解析代码移至单独的函数并重新调整完成代码:

#include <stdio.h>

int load_matrix(int a[26][26]) {
    int i, k;

    for (i = 0; i < 26; i++) {
        for (k = 0; k < 26; k++) {
            if (scanf("%d", &a[i][k]) != 1) {
                return 1;
            }
        }
    }
    return 0;
}

// calling this function from main:
int main(void) {
    int Arr[26][26];

    if (load_matrix(Arr)) {
        // the matrix was not correctly parsed, 
        // issue an error message, clean up and exit
        return 1;
    }

    // handle matrix
    ...

    return 0;
}

关于c中二维数组中整数的连续间隔输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34485501/

相关文章:

c - 在单个 printf() 语句中打印多个变量

php - 使用计数返回数组中的差异

forms - css 输入与按钮对齐

c++ - 尝试从 istream 存储 token 时出现段错误

c - 使用 scanf 连续读取字符串和 int 时遇到问题

c - 为什么 readdir () 系统调用没有按应有的方式工作(意外输出)?

c - 实现无限循环时,使用 while(1) vs for(;;) vs goto(在 C 中)有区别吗?

javascript - 替换数组中的对象

javascript - 使用 Vanilla JavaScript 搜索对象数组

html - 删除箭头输入类型 ='date'