1

以下是我正在工作的代码片段,虽然我的输入需要 4 个值,但在用户输入正确的值之前,它应该不断询问,任何输入都相同提前谢谢

#include<stdio.h>
#include<math.h>

int
main(int argc, char *argv[])
{
        int days;
        float peny;

        do{
                printf("Enter Number of days: ");
                scanf("%d", &days);
        }
        while ((days != 28) || (days != 29) ||(days != 30) ||(days != 31));
        printf("Number of days are %d", days);


}
4

4 回答 4

5

想想你的循环条件在说什么。它将继续循环,而这些单独的条件中的任何一个仍然为真,或者换句话说,循环直到所有这些条件同时为假。那可能吗?

于 2012-04-19T00:15:37.427 回答
2

而((天<28)||(天>31)); // IE。而天数是非法的,因为太低或太高

于 2012-04-19T00:19:18.280 回答
2

条件

(((days != 28) || (days != 29) ||(days != 30) ||(days != 31)))

在您的do-while循环中将始终为真,因为天数的值不能同时为 28、29、30、31。or 运算符可以更改为 and:

while ((days != 28) && (days != 29) && (days != 30) && (days != 31));
于 2012-04-19T00:33:16.597 回答
1

始终从scanf();测试返回状态 如果它没有告诉你 1,它就失败了,可能是因为用户键入a而不是31.

考虑计算连续失败的次数(如果计数过高则退出),这样用户就不会感到沮丧。

考虑使用fgets()读取输入并sscanf()解析它;它通常更容易管理。

考虑将 C++ 用于 C++,将 C 用于 C;您展示的是 C 程序而不是 C++ 程序(尽管它确实可以用 C++ 编译,除非我的眼睛在欺骗我)。一般来说,语言是非常不同的。

在 final 末尾添加一个换行符printf()

于 2012-04-19T00:15:37.303 回答