C 空间分隔整数到数组
我是C语言的新手,我有一个赋值,在这里我得到一个C 空间分隔整数到数组,c,arrays,scanf,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
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;
}
我得到:
4 5 3 4 5 6
0
1
2
3
4
5
我不确定,但当我运行您的代码时,会出现分段错误,因为不是:
int n, q;
int a[n];
int m[q];
scanf("%d %d", &n, &q);
您应该首先读取n,q,然后像这样声明a[n],m[q]:
int n, q;
scanf("%d %d", &n, &q);
int a[n];
int m[q];
我试着运行你的代码,第一次扫描得到6,所以n=6,q=6
然后,作为您的示例,我给出了输入:
1 2 3 4 5 6
0
1
2
3
4
5
而且打印正确。我不确定,但当我运行代码时,会出现分段错误,因为不是:
int n, q;
int a[n];
int m[q];
scanf("%d %d", &n, &q);
您应该首先读取n,q,然后像这样声明a[n],m[q]:
int n, q;
scanf("%d %d", &n, &q);
int a[n];
int m[q];
我试着运行你的代码,第一次扫描得到6,所以n=6,q=6
然后,作为您的示例,我给出了输入:
1 2 3 4 5 6
0
1
2
3
4
5
而且打印正确。不要使用
scanf
,对于您的情况来说,这尤其是错误的,因为它无法区分不同类型的空格(空格和换行符)
相反,您应该使用
fgets
逐行读取输入,然后使用sscanf
或strtok
解析每一行,不要使用scanf
,对于您的情况来说,这尤其是错误的,因为它无法区分不同类型的空格(空格和换行符)
相反,您应该使用
fgets
逐行读取输入,然后使用sscanf
或strtok
解析每一行欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请查看该页面,同时查看,您是只想分析有效输入还是同时检测无效输入?欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请同时查看页面和,您是只想分析有效输入还是同时检测无效输入?