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

scanf读取数字字符串后无法正确生成目标数字三角形,输出结果异常

scanf读取数字字符串后无法正确生成目标数字三角形,输出结果异常

嗨,我来帮你排查下问题所在~

你遇到的这个异常输出,核心是两个小错误搞混了逻辑:

1. 把字符直接当数值用,没做ASCII转换

你代码里的s[i]是字符类型哦!比如你输入的'1',它的ASCII码值其实是49,不是数字1。所以当你写j <= s[i]时,实际是让循环从1跑到49,这就是为什么第一行会打印到49,第二行的'2'对应ASCII码50,就会打印到50,完全偏离了你的预期。

2. 代码逻辑和你的需求不匹配

看你给的例子,输入123想要输出每行依次是1、12、123——也就是打印输入字符串的前缀。但你原来的代码逻辑是“遍历每个字符,然后打印1到该字符对应的数值”,这和你想要的效果完全不是一回事。

修正后的代码(对应你的需求例子)

我给你写了符合你需求的代码,直接打印输入字符串的前缀就好:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

int main()
{
    char s[501];
    scanf("%[^\n]", s);
    int str_len = strlen(s);
    // 循环控制行数,从第1行到第str_len行
    for (int i = 0; i < str_len; i++) {
        // 打印当前行需要的前i+1个字符
        for (int j = 0; j <= i; j++) {
            printf("%c", s[j]);
        }
        printf("\n");
    }
    return 0;
}

要是你其实是另一种需求:比如输入的每个字符代表该行要打印到的数字(比如输入312就会输出123、12、123),那只需要给字符做个ASCII转换就行,代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

int main()
{
    char s[501];
    scanf("%[^\n]", s);
    for (int i = 0; s[i] != '\0'; i++) {
        // 把字符转成真实数字:用字符减去'0'的ASCII值就行
        int target_num = s[i] - '0';
        for (int j = 1; j <= target_num; j++) {
            printf("%d", j);
        }
        printf("\n");
    }
    return 0;
}

你可以根据自己的实际需求选对应的代码,调整后就能得到你想要的三角形啦~

备注:内容来源于stack exchange,提问作者webdrivertrash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:52:57