2016-09-11 45 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解析每行。

相關問題