2016-09-11 44 views
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; 
} 

例如,当我输入:

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

欢迎来到Stack Overflow。 请注意,在这里说'谢谢'的首选方式是通过 提高投票的好问题和有用的答案(一旦你有足够的声誉这样做),并接受任何 问题最有用的答案,你问(这也给你一个小小的提升,以你的声望 )。 请参阅[关于]页面,以及[如何在此处提问 ?]和 [当有人回答我的 问题时,我该怎么办? ?](http://stackoverflow.com/help/someone-answers) –

+0

你只想解析有效的输入或检测无效的输入吗? – chux

回答

3

我不知道,但是当我运行代码,我得到分段错误,因为代替:

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

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

你应该先r EAD N,Q,然后声明[n]的,米[Q]是这样的:

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

我试图运行代码给出6 6用于第一scanf的,因此n = 6,Q = 6 ,之后作为我给你的例子输入:

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

它打印权。

+0

非常感谢,解决了它! – Chr

2

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

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

相关问题