我甚至在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部分)
输出的其他部分: (B部分)
输入介于1和4之间的数字以查看输入天数的平均温度,输入负数退出:5
输入无效,请输入1到4之间的数字,包括:3
直至第3天的平均温度为:2.50
输入介于1和4之间的数字以查看输入天数的平均温度,输入负数退出:2
第2天的平均温度为:2.75
输入介于1和4之间的数字以查看输入天数的平均温度,输入负数退出:-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
以下是仅在输入不正确时显示消息的变体:
int var;
do
{
printf("\nEnter a value between 5 and 12:");
scanf("%d", &var);
} while (var < 5 || var > 12);
我建议一行一行地了解上面的代码是如何工作的。特别是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;
跳到循环的下一次迭代,这在上面的代码中没有使用,但可能会派上用场。