在运行完这两个函数一次之后,do while
循环将继续跳转到while
条件并直接转到getInt函数,然后getInt函数将陷入scanf("%d,%c", &Value, &NL)
直到输入一个字符(或类似于office的单词)。这将再发生3次,直到第四个“无效整数”消息出现,然后“超出范围”消息将显示,只会使who进程再次发生。不确定是do-while
循环不起作用,还是if statements
不起作用。
当用一个词(即office)测试函数时,getInt
将声明值为“无效整数”,当用值99或501测试时,getIntInRange
应声明值为“超出范围”,但是,在5次迭代之后,getIntInRange
函数将只显示“超出范围”消息(如果在值和字符之间交替,则“超出范围”第四次尝试输入值后将显示消息
// getInt function definition goes here:
int getInt(void) {
int Value = 0;
char NL = "";
do {
scanf("%d%c", &Value, &NL);
if (NL != '\n') {
clearKeyboard();
printf("*** INVALID INTEGER *** <Please enter an integer>: ");
} else {
};
} while (NL != '\n');
return Value;
}
// getIntInRange function definition goes here:
int getIntInRange(int lowerBound, int upperBound) {
do {
//getInt();
if (getInt() < lowerBound | getInt() > upperBound) {
printf("*** OUT OF RANGE *** <Enter a number between %d and %d>: ", lowerBound, upperBound);
} else {
continue;
};
} while (getInt() < lowerBound | getInt() > upperBound);
return getInt();
}
我的
getIntInRange
函数假设从getInt
函数接收一个值(getInt
检查输入的值是否为整数),并将这些值与下边界(在不同的源代码中设置为100)和上边界(在不同的源代码中设置为500)进行比较。如果值超出范围,则将显示错误消息。 最佳答案
您的代码有多个错误:char NL = "";
不正确:char
是字符,""
是字符串。scanf("%d%c", &Value, &NL);
不是可靠地测试正确输入的方法,您应该测试scanf()
的返回值:if (scanf("%d", &Value) != 1) { /* invalid input */ }
不应多次调用getInt()
,该值必须存储在变量中,并且应测试该变量,否则将丢失值输入。
在再次调用scanf()
之前,您应该先使用有问题的输入。
您应该检查文件结尾以避免无限循环。
您应该使用||
或&&
进行逻辑测试,|
用于位操作。
避免do
/while
循环,它们是众所周知的混乱和易于编程错误。
以下是更正版本:
#include <stdio.h>
#include <stdlib.h>
int clearInput(void) {
int c;
while ((c = getchar() != EOF && c != '\n')
continue;
return c;
}
int getInt(void) {
int value = 0;
while (scanf("%d", &value) != 1) {
if (clearInput() == EOF) {
printf("unexpected end of file\n");
exit(1);
}
printf("not an integer, try again\n");
}
return value;
}
int getIntInRange(int lowerBound, int upperBound) {
for (;;) {
int value = getInt();
if (value >= lowerBound && value <= upperBound)
return value;
printf("*** OUT OF RANGE *** <Enter a number between %d and %d>: ", lowerBound, upperBound);
}
}
关于c - 被跳过时执行或If语句不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55348817/