【问题标题】:Continuous spaced input of integers in 2d array in cc中二维数组中整数的连续间隔输入
【发布时间】:2016-04-01 19:54:23
【问题描述】:

在 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]);
    }
}

【问题讨论】:

  • int Arr[26][26];... for(k=0;k&lt;52;k=k+2) --> for(k=0;k&lt;26; k++) 跳过空格。

标签: c arrays input integer 2d


【解决方案1】:

您的代码几乎是正确的:

  • 您应该只将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;
}

【讨论】:

  • 非常感谢......它成功了!你能详细说明一下为什么你在代码中使用了错误部分吗?
  • 我使用error 变量退出嵌套循环以防扫描错误,而不是反复解析失败。为此,我可以使用goto 语句,但error 变量更明确。另一种选择是将解析代码移动到单独的函数并返回完成代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2011-08-23
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多