如何使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,循环将重复。输入一个有效的浮点数也是如此,它是一个负数。

10-05 20:25
查看更多