2014-02-27 168 views
0

我想爲我的計算機課程做一個問題,但我遇到了麻煩。問題在於長度需要從小河的左邊到右邊的長度的渡輪,我確信有人聽說過它。我唯一的問題(我有一個好主意如何做大部分代碼,只是碰到了一個障礙)是我要麼陷入一個無限循環,要麼我的嵌套循環退出for循環,它嵌套在底部附近。我的代碼如下:正確清除鍵盤緩衝區

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char* argv[]) 
{ 
int testCases; 
int ferrySize; 
int numOfCars; 
char riverSide; // what side of river is the car on? 
char c; // eats unnecessary characters 
int test=1; 
int i,j=0;// counters for "for" and "while" loops 
int carLength; 
const int cm_to_m=100; 

printf("How many tests would you like to have?: "); 
scanf("%d", &testCases); 
printf("how long is the ferry in meters and how many cars are there?: "); 
scanf("%d", &ferrySize); 
ferrySize=ferrySize*cm_to_m; 
scanf("%d", &numOfCars); 
printf("cases %d ferrysize %d cars %d\n", testCases, ferrySize, numOfCars); 
printf("\nhow long is each car (in cm) and what side is it on?\n(seperate this info with a space)\nseperate each car by new lines."); 


for(i=0; i<=numOfCars;i++); 
{ 
    scanf("%d", &carLength); 
    scanf(" %c", &riverSide); 
    printf("%c", riverSide); 
    do 
    { 
     scanf("%c", &c); 
     printf("%c", c); 
    }while(c!='t' && c!='T'); 
    printf("%c", riverSide); 

} 
return 0; 

}

+1

對於掃描字符,請使用'的getchar()',而不是'的scanf( 「%C」,... )'。 'scanf()'在掃描字符方面很差。 –

+0

我的教授出於某種原因教導我們使用scanf代替。我認爲他希望我們由於某種原因而忽略空白字符?另外,我嘗試了getchar函數,以便它可以修復它 - 它具有與scanf相同的效果。退出程序(儘管不會崩潰),好像它已經完成了所有的事情,儘管for循環仍然應該運行。 – msd94

+0

你能給出一個樣本輸入和期望的輸出嗎? – emsworth

回答

0

嘗試使用fflush(),它會清空緩衝區和代碼將運行得很好。

+0

緩衝區的文件是標準輸入嗎?我會試試看。謝謝 – msd94

+0

如果你不給它任何參數,它會刷新一切。試試這種方式。 – homa

+0

它仍然退出所有循環。我要猜測我的for循環出現了問題...編輯:我發現了問題!這是我的循環,檢查條件...(...; ...; ...);而不是(...; ...; ...) – msd94

0

檢查for循環行末尾的額外分號。你也可以做以下的循環讀取值(忽略安全等):

for(i=0; i<numOfCars; i++) { 
    scanf("%d %c", &carLength, &riverSide); 
    printf("car is %d long and on the %c side\n", carLength, riverSide"); 
}