if / else语句只能按整数使用。

时间:2018-01-03 19:35:32

标签: c scanf

它可以正常工作,直到你输入一个字符,然后它变成一个无限循环,而不是只说'#34;无效的数字"。我不明白为什么。请帮忙?

#include <stdio.h>
int main (void)
{
int i = 0;
int number;
while (i == 0){
        printf("Enter a number greater than 0 and smaller than 23.\n");
        scanf (" %d", &number);
        if (number < 23 && number > 0 ){
            printf("Sucess!\n");
            break;
        } else {
            printf("Invalid number.\n");
}
}
}

2 个答案:

答案 0 :(得分:3)

有几项改进代码的建议:

  • 始终检查scanf的返回值,该值告诉您有多少 输入已成功阅读。
  • 未处理的输入保留在输入缓冲区中 - 必须清除 进行。
  • 未初始化的变量会误导你。
  • 使用控制循环的i变量。

修改意见:

#include <stdio.h>

int main (void)
{
    int i = 0;
    int number = 0;                                 // an invalid value
    while (i == 0) {
        printf("Enter a number greater than 0 and smaller than 23.\n");
        if(scanf("%d", &number) == 1 && number < 23 && number > 0 ) {
            printf("Success!\n");
            i = 1;                                  // satisfy the loop control
        } else {
            printf("Invalid number.\n");
            while(getchar() != '\n');               // clear the input buffer
        }
    }
}

答案 1 :(得分:0)

简单地说,输入的值超出了检查范围0到23.输入字符时得到的值会在int变量宽度中产生一些非常糟糕的值。为什么?因为scanf函数将输入作为十进制数,所以它读取的不仅仅是一个字符,而且内存中的任何内容都被选为数字。我希望他的帮助。 这是一个常见的问题,请在此处查看scanf的用法:http://www.cplusplus.com/reference/cstdio/scanf/