2013-10-16 90 views
0

我正在爲我的嵌入式C類的分配,我遇到了我似乎無法來解決問題。我的問題是++i只會改變一次。在循環運行i第一時間將0,第二次i1i後總是會1無論多少次的循環迴路。任何人都知道問題可能是什麼?我把printf("%d\n", i);只是看看i是否改變。++我在while循環只換一次

void addCar() { 
    char choice = 'y'; 
    int i = 0; 
    while((choice == 'y' || choice == 'Y') && i < MAX_CAR) { 
     printf("Make: "); 
     scanf("%s", fleet[i].make); 

     getDate(1, i); 

     getDate(2, i); 

     printf("Purchaseprice: "); 
     scanf("%lf", &fleet[i].purchasePrice); 

     ++i; 
     printf("%d\n", i); 
     printf("Do you want to add another car? (Y/N)"); 
     scanf("%s", &choice); 
    } 
} 

回答

8

你不能這樣做scanf("%s", &choice):沒有足夠的空間&選擇「緩衝」抱着你掃描串 - 掃描的字符串長度至少2個字符與終止「\ 0」 ,堆棧中的其他變量被覆蓋。

使用scanf("%c", &choice)來代替。

+0

感謝您的答覆。但是,這真的可以導致++我不改變每一個循環? –

+3

@ MartinHjelm-Wallborg它絕對可以改變堆棧上的其他變量。您是否嘗試過修復該代碼? – Evgeny

+3

@ MartinHjelm-Wallborg如果內存分配是連續的,那麼他在'choice'之後的下一個字節是'i'的第一個字節,所以不是在'choice [1]中寫'0'(空終止字符)'it將它寫入'i'的一個字節中。 – zakinster