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

我是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;
}
我得到:

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
解析每一行欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请查看该页面,同时查看,您是只想分析有效输入还是同时检测无效输入?欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请同时查看页面和,您是只想分析有效输入还是同时检测无效输入?