Scanf跳过一行

问题描述:

我正在编写一个代码,提示用户输入他们选择的天数(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

你在找这样的吗?

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