空格将整数分隔为数组

时间:2016-09-11 10:32:33

标签: c arrays scanf

我是C的新手,我有一个作业,我得到n空格分隔整数的输入,以及由新行分隔的q整数。我想将n整数保存在数组a中,将q整数保存在另一个数组m中。

到目前为止,这是我的代码,它可以按m的预期工作,但a中的元素非常随机。如何将空格分隔的整数保存到数组中?

int main() {

    // The code
    int n, q;
    int a[n];
    int m[q];

    scanf("%d %d", &n, &q);

    for (int i=0; i<n; i++) {
        scanf("%d", &a[i]);
    }

    for (int i=0; i<q; i++) {
        scanf("%d", &m[i]);
    }

    // Troubleshooting
    for (int i=0; i<n; i++) {
        printf("%d ", a[i]);
    }

    printf("\n");

    for (int i=0; i<q; i++) {
        printf("%d\n", m[i]);
    }

    return 0;
}

例如,当我输入时:

1 2 3 4 5 6
0
1
2
3
4
5

我明白了:

4 5 3 4 5 6 
0
1
2
3
4
5

2 个答案:

答案 0 :(得分:3)

我不确定但是当我运行你的代码时,我得到分段错误,因为而不是:

    int n, q;
    int a[n];
    int m[q];

   scanf("%d %d", &n, &q);

你应该首先阅读n,q然后声明[n],m [q]如下:

int n, q;
scanf("%d %d", &n, &q);
int a[n];
int m[q];

我尝试运行你的代码,给第一次scanf 6 6,所以n = 6,q = 6 然后作为你的例子我给了输入:

1 2 3 4 5 6
0
1
2
3
4
5

然后打印出来。

答案 1 :(得分:2)

请勿使用scanfscanf is notoriously hard to use,这对你的情况特别不对,因为它不会区分不同类型的空格(空格与换行符)。

相反,您应该使用fgets逐行阅读输入,然后使用sscanfstrtok解析每一行。