需要一些帮助这个C代码

时间:2017-02-15 03:17:08

标签: c

我甚至在3到10之间输入了值但是同样的错误。需要一些帮助!

int main() {
    printf("\nPlease enter the number of days between 3 and 10, inclusive:\n");

    int high[10] = { 0 };
    int low[3] = { 0 };

    int i = 0;
    int days = 4;

    for (i = 0; i < days; i++) {

        do
        {
            if (i < 3 || i > 10) {
              printf("Invalid entry, please enter a number between 3 and 10, inclusive:");
            }
            printf(" \nDay %d - High: ", i + 1);
            scanf("%d", &high[i]);
            printf("Day %d - Low: ", i + 1);
            scanf("%d", &low[i]);
       } while (i < 3 || i > 10);
    }

输出应该是这样的:

(A部分)

  • 第1天 - 高: 6
  • 第1天 - 低: -2
  • 第2天 - 高: 8
  • 第2天 - 低: -1
  • 第3天 - 高: 7
  • 第3天 - 低: -3
  • 第4天 - 高: 9
  • 第4天 - 低: -4

输出的其他部分: (B部分)

输入介于1和4之间的数字以查看输入天数的平均温度,输入负数退出:5

输入无效,请输入1到4之间的数字,包括:3

直至第3天的平均温度为:2.50

输入介于1和4之间的数字以查看输入天数的平均温度,输入负数退出:2

第2天的平均温度为:2.75

输入介于1和4之间的数字以查看输入天数的平均温度,输入负数退出:-1

1 个答案:

答案 0 :(得分:1)

这就是发生的事情(在评论中阅读):

// THE CODE STARTS SHOWING THIS:
printf("\nPlease enter the number of days between 3 and 10, inclusive:\n");

// ...declarations...

// THEN THIS IS A DO ... WHILE, IT WILL RUN THE FIRST TIME WITHOUT CHEKING
// YOU HAVEN'T TAKEN USER INPUT YET
for (i = 0; i < days; i++) {
    // ON THE FIRST ITERATION i = 0
    do
    {
        // YOU HAVEN'T TAKEN USER INPUT YET
        // REMBEMBER THAT i = 0, SO i < 3 IS true
        if (i < 3 || i > 10) {
          // IT WILL SHOW THIS, BUT YOU HAVEN'T TAKEN USER INPUT YET
          printf("Invalid entry, please enter a number between 3 and 10, inclusive:");
        }
        // ... NOW YOU TAKE USER INPUT ...
    } while (i < 3 || i > 10);
}

我想指出你所拥有的for循环将从0变为3,但是你的low数组只有3个项目,因为你声明它int low[3],这些项目是{{1} },low[0]low[1]。这意味着当low[2]大于2时,行scanf("%d", &low[i]);将指向low数组之外。

我不确定你想要什么,但是,这里有一些控制变量范围的代码:

i

Run Online

以下是仅在输入不正确时显示消息的变体:

int var;

do
{
    printf("\nEnter a value between 5 and 12:");
    scanf("%d", &var);
} while (var < 5 || var > 12);

Run Online

我建议一行一行地了解上面的代码是如何工作的。特别是int var; for(;;) { printf("\nEnter a value between 5 and 12:"); scanf("%d", &var); if (var < 5 || var > 12) { printf("\nInvalid Input\n"); } else { break; } } 会破坏无限循环,代码只会在达到for(;;)时离开。注意:您也可以使用break;跳到循环的下一次迭代,这在上面的代码中没有使用,但可能会派上用场。