2013-10-16 91 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