如何使if语句要求用户在输入为负数或字母时重试?
struct foodstuff {
float amount;
};
void add(struct foodstuff *tmpAdd) {
printf("Write amount: ");
scanf("%f", &tmpAdd->amount);
while (tmpAdd->amount != 0) {
if (tmpAdd->amount < -1 || isalpha(tmpAdd->amount)) {
printf("Type in a valid number!\n");
printf("Write amount: ");
getchar();
scanf("%f", &tmpAdd->amount);
getchar();
}
else {
scanf("%f", &tmpAdd->amount);
getchar();
}
}
};
最佳答案
我认为您可以重新编写代码以使用do
循环:
do {
printf("Enter a positive number with no characters:\n");
int result = scanf("%f", &tmpAdd->amount);
while (tmpAdd->amount <= 0 || result != 1);
请注意,我已经删除了对
isalpha()
的调用,该调用一次仅作用一个字符。相反,我建议只检查输入的数字是一个有效的浮点,并且它大于零。如果scanf
未能成功读取有效的浮点,则其返回值将不是1,循环将重复。输入一个有效的浮点数也是如此,它是一个负数。