以下是我正在使用的代码片段,虽然我的输入需要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);
}
答案 0 :(得分:5)
想想你的循环条件是什么。它将保持循环,而任何这些单独的条件仍然是真的,或换句话说,循环直到所有这些条件同时为假。这可能吗?
答案 1 :(得分:2)
而((天&LT; 28)||(天&GT; 31)); //即。而日子是非法的,因为低或太高
答案 2 :(得分:2)
条件
(((days != 28) || (days != 29) ||(days != 30) ||(days != 31)))
do-while
循环中的始终为真,因为天数的值不能同时为28,29,30,31。或者运算符可以更改为和:
while ((days != 28) && (days != 29) && (days != 30) && (days != 31));
答案 3 :(得分:1)
始终从scanf()
测试返回状态;如果它没有告诉你1,它就会失败,可能是因为用户键入了a
而不是31
。
考虑计算连续失败的次数(如果计数过高则挽救),这样用户就不会感到沮丧。
考虑使用fgets()
来读取输入,并使用sscanf()
来解析它;它通常更容易管理。
考虑将C ++用于C ++,将C用于C;你展示的是一个C程序而不是一个C ++程序(虽然它确实可以用C ++编译,除非我的眼睛欺骗我)。一般来说,语言非常不同。
在最终printf()
的末尾添加换行符。