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

能否在if语句中使用scanf函数?C语言代码问题咨询

问题分析与解决方法

原代码的核心错误是混淆了scanf的返回值与输入的数值:

  • scanf("%d", &n)的返回值是成功读取的整数个数(正常读取时返回1,读取失败/到文件尾返回EOF),和输入的n的奇偶性完全无关。原代码中用scanf(...)%2 !=0判断,会导致只要成功读取一个数就直接退出循环,完全达不到“输入到奇数才停止”的目的。

修正后的代码(基础版)

把scanf放在if内时,需要先判断读取是否成功,再检查输入数值的奇偶性:

// take input from user until user enters odd number
#include <stdio.h>

int main(){
    int n;
    
    do{
        printf("Enter a number :");
        // 先确认成功读取整数,再判断奇偶
        if(scanf("%d", &n) == 1){
            if(n % 2 != 0){
                break; // 输入奇数,退出循环
            }
        } else {
            // 读取失败(如输入非数字),直接退出
            break;
        }
    }while(1);
    printf("End");
    return 0;
}

更健壮的版本(处理输入错误)

如果需要处理用户输入非数字的情况(避免死循环),可以加入缓冲区清理逻辑:

// take input from user until user enters odd number
#include <stdio.h>

int main(){
    int n;
    int read_status;
    
    do{
        printf("Enter a number :");
        read_status = scanf("%d", &n);
        
        if(read_status == 1){
            if(n % 2 != 0){
                break;
            }
        } else if(read_status == EOF){
            // 遇到文件结束符,退出循环
            break;
        } else {
            // 输入无效,清理缓冲区的垃圾字符
            printf("Invalid input! Please enter an integer.\n");
            while(getchar() != '\n'); // 清空直到换行符
        }
    }while(1);
    printf("End");
    return 0;
}

内容的提问来源于stack exchange,提问作者007Dhruv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:52:39