我是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
答案 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)
请勿使用scanf
。 scanf
is notoriously hard to use,这对你的情况特别不对,因为它不会区分不同类型的空格(空格与换行符)。
相反,您应该使用fgets
逐行阅读输入,然后使用sscanf
或strtok
解析每一行。