2017-02-12 120 views
1

我正在編寫一個代碼,提示用戶輸入他們選擇的天數(3-10)之間的高點和低點。到目前爲止,除了scanf函數之外,所有的輸出都是正確的,用於輸入比它們應該低一行的高溫和低溫。例如第1天的高電平和低電平將會輸出,但用戶的輸入始於第1天的低電平,所以高電平的輸入接近低電平,低電平的輸入接下一空白行。Scanf跳過一行

我認爲這個問題可能是printf正在完成它在scanf生效之前輸出高電平和低電平的功能。有什麼辦法可以讓scanf發生,以便高低值可以相鄰輸入?這裏是我的代碼:

#include <stdio.h> 

int main (void) 
{ 
    int i; 
    int limit; 
    int day[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
    int high[10],low[10]; 

    printf("---===IPC Temperature Analyzer V2.0===---\n"); 

    printf("Please enter the number of days between 3 and 10, inclusive: "); 
    scanf("%d", &limit); 
    while (limit <= 2 || limit >= 11) { 
      printf("Invalid"); 
      scanf("%d", &limit); 
    } 

    for(i = 0;i < limit; i++) { 
      printf("Day %d - High:\n Day %d - Low: ",day[i],day[i]); 
      scanf("%d%d", &high[i], &low[i]); 
    } 

    return 0; 
} 
+0

光標在屏幕上會在最後打印輸出的結束,所以你看到的是它如何工作的。您可以要求用戶分別輸入高和低,如printf(「Day%d - Hight:」,day [i]); scanf(「%d」,&high [i]); printf(「Day%d - Low:「,day [i]); scanf(」%d「,&low [i]); – Shiping

+0

提示中的'\ n'將您移至下一行。神奇地期望系統如何實現你想讓光標上移一行?打印第一個條目的提示,獲取其輸入,然後提示第二個條目,並獲取其輸入。 –

+0

我將您的建議應用於Wasi,現在按預期工作,謝謝!我最初嘗試過這種方法,但我相信當時我的代碼中有其他錯誤,導致它輸出所有的高點,然後輸出所有的低點。 – Jinto

回答

2

你在找這樣的嗎?

for(i = 0;i < limit; i++) { 
    printf("Day %d - High: ", day[i]); 
    scanf("%d", &high[i]); 
    printf("Day %d - Low: ", day[i]); 
    scanf("%d", &low[i]); 
} 

這導致:

Please enter the number of days between 3 and 10, inclusive: 4 
Day 1 - High: 5 
Day 1 - Low: 3 
Day 2 - High: 4 
Day 2 - Low: 2 
Day 3 - High: 2 
Day 3 - Low: 1 
Day 4 - High: 5 
Day 4 - Low: 9