0

我是 c 编程的新手,但我只是不明白为什么这段代码在编译后无法正常运行。现在,我只希望它取 10 到 100 之间的数字而不会出错。然后稍后我将添加 return 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

4 回答 4

2

while (UserIn < Min && UserIn > Max)

userIn永远不可能同时满足这两个条件。将其更改为:

whihe (userIn < Min || userIn > Max)

于 2013-09-12T03:30:53.587 回答
1

您确实意识到scanf确实会返回一个值吗?见http://linux.die.net/man/3/scanf

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

最好读入一个字符串并解析它。

while (UserIn < Min && UserIn > Max)

应该

while (UserIn < Min || UserIn > Max)
于 2013-09-12T03:31:57.263 回答
0

代替

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

和:

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

你也可以用do ... while替换你的while循环。那么你将不会有双重scanf

于 2013-09-12T03:31:48.463 回答
0

为了帮助您调试它,请尝试以下代码:

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

此外,只有当 Userin 的第一个输入值 < 10 或 > 100 时,此 while 循环才会运行。

于 2013-09-12T03:40:52.943 回答