为什么我的while循环不会在此c代码中启动?

时间:2013-09-12 03:25:43

标签: c

我是c语言编程的新手,但我不明白为什么编译后这段代码无法正常运行。现在,我只想让它在没有错误的情况下取10到100之间的数字。然后我会为错误添加返回1,为成功添加0。

#include <stdio.h>
#include <stdlib.h>

int intGet(int, int);
int error();

int main(void)
{
    int Min, Max, UserIn;
    Min = 10;
    Max = 100;

    printf("Enter a number in between [10 -­100]: \n");
    scanf("%d", &UserIn);
    printf("Read %d\n", UserIn);

    while (UserIn < Min && UserIn > Max)
    {
        printf("Invalid \n");
        scanf("%d", &UserIn);
    }
    /* What I did to fix
      while ((UserIn > Min) || (UserIn < Max)){
         printf("Enter a number in between [10 -­100]: \n");
         scanf("%d",&UserIn);       
         printf("Read %d\n",UserIn);

       while ((UserIn < Min) || (UserIn > Max)){
         printf("Invalid \n");
         scanf("%d", &UserIn);
          printf("Read %d\n", UserIn);


       }
      }*/

    return EXIT_SUCCESS;
}

int intGet(int min, int max)
{

}

int error()
{

}

4 个答案:

答案 0 :(得分:2)

while (UserIn < Min && UserIn > Max)

userIn永远无法满足这两个条件。将其更改为:

whihe (userIn < Min || userIn > Max)

答案 1 :(得分:1)

您是否意识到scanf确实返回了值?见http://linux.die.net/man/3/scanf

如果它没有返回1那么你需要“吃掉”一些输入。

最好读取字符串并解析它。

另外

while (UserIn < Min && UserIn > Max)

应该是

while (UserIn < Min || UserIn > Max)

答案 2 :(得分:0)

替换

while (UserIn<Min && UserIn>Max){

使用:

while (UserIn<Min || UserIn>Max){

你也可以用do ... while替换你的while循环。那你就不会有双重扫描

答案 3 :(得分:0)

为了帮助您调试此问题,请尝试以下代码:

while ((UserIn < Min) || (UserIn > Max))
{
    printf("Invalid \n");
    scanf("%d", &UserIn);
    printf("Read %d\n", UserIn);
}

此外,只有当Userin的第一个输入值为&lt;时,此while循环才会运行。 10或&gt; 100。