You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

do while循环中的if语句失效问题排查求助

问题:输入范围判断的if语句失效,else分支永远不执行

问题根源

你的if条件逻辑错误,误用了逻辑或(||)而非逻辑与(&&):

if (num < 256 || num >= 0)

这个条件对所有整数都成立——任何数字要么小于256,要么大于等于0,因此else分支永远不会触发,看起来就像if语句被忽略了。

修正方案

将条件改为同时满足num >= 0和num < 256,用逻辑与连接:

if (num >= 0 && num < 256)

修正后的完整代码

另外注意exit是C标准库的函数名,建议改用其他变量名避免冲突,同时增加输入错误的处理(比如输入非数字时清空缓冲区):

#define _CRT_SECURE_NO_DEPRECATE 1
#define _CRT_NONSTDC_NO_DEPRECATE 1
#include <stdio.h>
#include <conio.h>
#include <Windows.h>

int main(void) 
{
    int num;
    int exit_key; // 替换原exit变量名,避免和标准库函数冲突

    exit_key = 0;

    printf("\nLab5 p1 by Chung - En Hou\n");

    num = 0;
    do{
        printf("\nEnter a number between 0 and 255:");
        // 处理输入非数字的情况
        if (scanf("%d", &num) != 1) {
            // 清空输入缓冲区的垃圾数据
            while (getchar() != '\n');
            printf("\nInvalid input! Please enter an integer.\n");
            printf("\nPress any button to try again or press Esc to exit\n");
            exit_key = getch();
            continue;
        }
        // 正确的范围判断条件
        if (num >= 0 && num < 256) {
            Sleep(250);
            printf("%d\n", num);
            Sleep(250);
            printf("%x\n", num);
            Sleep(250);
            printf("%c\n", num);

            printf("Press any button to run the program again or press Esc to exit\n");
            exit_key = getch();
        }
        else {
            printf("\nThat number is invalid, please try again\n");
            printf("\nPress any button to try again or press Esc to exit\n");
            exit_key = getch();
        }
    } while (exit_key != 27);

    return 0;
}

额外说明

  • 输入非数字时,scanf会返回非1的值,此时需要清空输入缓冲区,避免后续循环一直读取错误数据
  • 变量名避免使用C标准库中的函数名(比如exit),防止命名冲突

内容的提问来源于stack exchange,提问作者jonathan hou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:35:45