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

C语言程序问题:实现0-100打印及重复功能失败求助

问题分析与修正

你的代码存在多处语法和逻辑错误,导致无法正常运行,下面逐一说明并给出修复方案:

错误点说明

  • 数组定义无效:char resposta[0];定义了长度为0的数组,无法存储任何字符,应改用单个char变量或至少长度为2的数组。
  • 循环逻辑错位:询问用户是否重复的代码被放在for循环内部,会导致每打印一个数字就弹出询问,不符合“打印完0到100后再询问”的需求。
  • printf格式错误:代码中换行直接写在字符串外,正确的换行符应为\n,比如printf("%i\n", num);。
  • scanf参数错误:scanf("%c", resposta[0]);未传入变量地址,正确写法应为scanf("%c", &resposta);,同时需要处理输入后遗留的换行符,避免干扰后续读取。
  • 比较方式错误:strcmp用于字符串比较,你传入的是单个字符,直接用字符相等判断即可,无需调用strcmp。
  • 打印范围偏差:原代码从num=0开始循环100次,最终只能打印1到100,无法输出0,且少了一次循环导致未覆盖到完整的0-100范围。

修正后的代码

#include <stdio.h>

int main()
{
    char resposta;

    // 初始设为's',确保第一次进入循环
    resposta = 's';

    do
    {
        // 从0打印到100,共101个数字
        for (int num = 0; num <= 100; num++)
        {
            printf("%i\n", num);
        }

        // 询问用户是否重复,处理换行符残留问题
        printf("Repetir? s/n\n");
        getchar(); // 读取掉之前打印残留的换行符
        scanf("%c", &resposta);

    } while (resposta == 'S' || resposta == 's');

    return 0;
}

额外说明

  • 使用单个char变量替代数组,避免数组越界风险,逻辑更简洁。
  • 将询问逻辑移至for循环外部,确保完成全部数字打印后再触发用户交互。
  • 加入getchar()处理换行符,避免用户输入回车后,换行符被下一次scanf误读导致的逻辑异常。
  • 调整for循环的初始值与条件,确保完整覆盖0到100的打印范围。

内容的提问来源于stack exchange,提问作者Bob Talinn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:10:41