2013-03-12 44 views
1

第一行輸入包含一個整數。每個輸入之後是包含兩個整數的行,每個整數不大於1 000 000.第一個整數n是向量的大小,第二個整數m是寄存器信息的行數。以下每行都包含兩個表示這個的整數x和y。一行中的任何兩個整數由一個空格分隔。這些行不包含其他字符,除了已完成的新行從標準輸入讀取整數並保存它們 - C

所以我選擇x作爲向量中的位置。 x被存儲在num1my_struct結構和y存儲在num2

typedef struct my_struct{ 
    int num1; 
    int num2; 
    bool my_bool; 
} my_struct; 


int main(){ 
    int testCase, sizeVector, numLines, num1_in, num2_in, linesScanned = 0; 
    scanf("%d\n %d %d", &testCase, &sizeVector, &numLines); 

    my_struct my_vector[sizeVector+1]; 

    my_vector[0].num1 = testCase; 
    my_vector[0].num2 = 0; 
    my_vector[0].my_bool = false; 

    while (linesScanned < numLines) { 
     scanf("%d %d\n ", &num1_in, &num2_in); 
     my_vector[num1].num1 = num1_in; 
     my_vector[num1].num2 = num2_in; 
     my_vector[num1].my_bool = false; 
     linesScanned++; 

    }} 

輸入例如:

1 
3 2 
1 2 
2 3 

我的問題是,第一scanf效果很好,但對循環沒有按」噸。它沒有保存價值,因爲它應該

+0

是什麼'num1'(你使用作爲'my_vector'的指數之一)? – varnie 2013-03-12 16:47:33

+0

是的,這就是我使用它的原因。 – FriedRike 2013-03-12 16:58:25

+0

我的意思是,你不增加它,是嗎?在您顯示的代碼中,不清楚它是否在每次迭代中更新。所以,看起來你在每次迭代時都會覆蓋'my_vector'的特定項目。 – varnie 2013-03-12 17:00:18

回答

1

更改第二scanf()

scanf("%d %d\n ", &num1_in, &num2_in); 

通過

scanf(" %d %d", &num1_in, &num2_in); 

事實上,在你的第二個scanf()你不開始閱讀之前趕上新線整數。 (空格,製表新生產線在你輸入進入,但它不是逮住既不在第一scanf()也不在你的第二個scanf()

添加空間的字符串格式的開始你的第二個scanf()會抓住任何空白,新行......)

+0

它的工作!謝謝! – FriedRike 2013-03-12 16:57:46

+0

不客氣 – MOHAMED 2013-03-12 16:58:34

+0

這不是'scanf'的工作方式,但在這個特定的輸入中並不重要。 – teppic 2013-03-12 17:07:13

1

更改您的代碼以擺脫您的scanf函數中的\n。事實上,你也可以擺脫這些空間。當使用%d時,輸入中的所有空白都將被忽略。

你也不會增加你的數組索引。

+0

它的工作!謝謝!感謝您對索引 – FriedRike 2013-03-12 16:59:03

1

你的第二個scanf應該是:

scanf(" %d %d", &num1_in, &num2_in); 
+0

的提醒!謝謝! – FriedRike 2013-03-12 16:56:08