初级程序员:
我试图格式化一个do
while
循环,如果用户输入了一个0-4范围之外的错误数字,那么我的程序应该要求用户输入一个正确范围内的数字。一旦满足了参数,我希望我的代码继续运行if
语句。我错过了什么?
#include <stdio.h>
int main() {
int userNum;
char tableOne[5] = { 'A', 'B', 'C', 'D', 'E' };
int tableTwo[5] = { 11, 12, 13, 14, 15 };
printf("Enter a whole number in the range of 0 to 4.\n");
scanf("%d", &userNum);
do {
printf("ERROR. ENTER WHOLE NUMBER \nIN THE RANGE OF 0 - 4 \nIN NUMERICAL FORMAT.\n");
scanf("%d", &userNum);
break:
} while (userNum < 0 || userNum > 4);
if (userNum == 0) {
printf("%d", tableOne[0] + tableTwo[0]);
}
if (userNum == 1) {
printf("%d", tableOne[1] + tableTwo[1]);
}
if (userNum == 2) {
printf("%d", tableOne[2] + tableTwo[2]);
}
if (userNum == 3) {
printf("%d", tableOne[3] + tableTwo[3]);
}
if (userNum == 4) {
printf("%d", tableOne[4] + tableTwo[4]);
}
return 0;
}
3条答案
按热度按时间5uzkadbs1#
break
语句在scanf
退出循环后立即执行,它甚至没有达到while
条件检查。删除它1.检查
scanf
的结果,看看数字是否正确读取:1.你也不需要这些
if
(break
也不需要-你应该在练习本上阅读或问你的老师这个语句是什么):o8x7eapl2#
break
语句在scanf()
之后立即退出循环。这解释了你的观察:循环在1次迭代后退出。它实际上在验证测试之前的第一次迭代中退出。请注意,您应该检查转换错误,使用有问题的输入,并在
scanf()
没有返回1
的情况下重新启动输入,如果没有更多的输入,则报告文件结束。do { ... } while
循环不适合合并组合这两种形式的输入验证,因为如果存在转换错误,则有效性测试毫无意义,并且不能使用continue
语句绕过它。do { ... } while
循环很少是正确的工具,并且往往会嵌入逻辑错误,例如缺少条件。您应该使用for (;;)
循环(也称为 for ever 循环)并显式地编写条件。使用
fgets()
和sscanf()
的组合而不是scanf()
可以实现更好的错误处理和恢复。以下是修改后的版本:
pkln4tw63#
我想你需要这样的东西。你需要在while循环中放置{}。
编辑
所以,现在我知道你的do while循环有一些问题。因为print是printf而不是if语句。我将搜索的东西给给予一些体面的代码。
试试这个:
}