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

C代码编译成功但执行后仅输出空行的问题求助

问题分析与修复方案

嘿,我来帮你搞定这段代码的问题!你遇到的执行后输出空内容的情况,主要是几个关键错误在搞鬼,咱们一个个说:

  • 输入格式符不匹配:
    你把number声明成了int类型,但用scanf("%u", &number);来读取输入——%u是给无符号整数用的格式符,和int不匹配,这会导致输入的数值被错误解析,甚至触发奇怪的未定义行为。把格式符改成%d就对了。

  • 字符串拷贝的致命错误(核心问题):
    这里的strcpy(parity[7], "even");完全写错了!parity是一个char数组,parity[7]指的是数组里的第8个字符(数组索引从0开始,你定义的parity[7]最大只能到索引6),而且strcpy的第一个参数需要是字符串的起始地址(也就是数组名parity),不是单个字符。这种写法会直接访问非法内存,程序要么输出空内容,要么直接崩溃。正确写法是strcpy(parity, "even");和strcpy(parity, "odd");。

  • 没处理非三位数的情况:
    你的代码只有输入100-999的三位数时才会执行printf,如果输入的不是三位数,程序就直接结束,啥也不输出,看起来就是空内容。建议加个else分支,提示用户输入正确的三位数。

  • 可选优化:避开浮点函数的精度坑:
    计算平方用pow(sum,2)有点没必要,直接用sum * sum既高效又不会有浮点精度误差;另外sqrt返回的是double类型,用double接收比float更准确。

下面是修正后的完整代码:

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdio.h> // 显式包含stdio.h,避免编译器兼容性问题

int main() {
    int number, u, t, h, sum;
    char parity[7] = "";
    double result; // 改用double适配sqrt的返回值
    printf("Number : ");
    scanf("%d", &number); // 修正格式符为%d
    u = number % 10; // number本身是int,无需强制转换
    t = (number % 100) / 10; // 加括号让逻辑更清晰
    h = number / 100;
    sum = u + t + h;
    if (number >= 100 && number <= 999) {
        if (number % 2 == 0) {
            strcpy(parity, "even"); // 修正strcpy的目标地址
            result = sum * sum; // 用整数乘法替代pow,避免精度问题
            printf("%d + %d + %d = %d : %s ---> %d*%d = %.0f \n", u, t, h, sum, parity, sum, sum, result);
        } else {
            strcpy(parity, "odd"); // 修正strcpy的目标地址
            result = sqrt(sum);
            printf("%d + %d + %d = %d : %s ---> Sqrt(%d) = %.2f \n", u, t, h, sum, parity, sum, result);
        }
    } else {
        printf("Error: Please enter a 3-digit number (100-999)\n"); // 提示输入错误
    }
    return 0;
}

另外补充一句:你之前的代码没显式包含stdio.h,虽然很多编译器会隐式包含,但显式加上能避免一些奇怪的编译问题,是更好的编程习惯~

内容的提问来源于stack exchange,提问作者Bacim OUESLATI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:22:49