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

C语言提取字符串中商品价格结果错误,有什么更优实现方案?

价格计算错误的原因
  • 第一个核心错误在getprice函数的第一层循环:for循环本身每次迭代会自动执行i++,你又在循环体内额外加了一次i++,相当于每轮循环i递增2,根本找不到正确的数字起始位置,大概率会跳过第一个数字字符。
  • 第二个错误是提取价格的循环没有做数字合法性判断:找到第一个数字后,后续所有字符(包括输入末尾的换行符、空格等非数字字符)都被强制减去'0'参与计算,再加上你用%u(无符号整数)输出负数结果,最终就会得到262这类异常值。
  • 现有拆分逻辑的鲁棒性很差:靠遍历判断字符的方式很容易因为输入格式的微小偏差出问题,比如商品名里带数字、分隔符格式变化都会导致结果错误。
更简单可靠的实现方案

直接用C标准库的字符串查找函数定位分隔符" - ",直接拆分商品名和价格两部分,逻辑清晰不容易出错,参考实现代码如下:

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

int main()
{
    char item[40];
    // 读取输入,替换fgets保留的末尾换行符为结束符
    fgets(item, 40, stdin);
    item[strcspn(item, "\n")] = '\0';
    
    // 查找分隔符 " - " 的位置
    char *sep = strstr(item, " - ");
    if (sep == NULL) {
        printf("输入格式错误\n");
        return 1;
    }
    
    // 拆分字符串:sep前面是商品名,sep+3(" - "长度为3)后面是价格部分
    *sep = '\0';
    int price = atoi(sep + 3);
    
    // 按要求输出
    printf("Item: %s\n", item);
    printf("       Price: %d\n", price);
    return 0;
}
  • 该实现直接依赖标准库函数做字符串拆分,不需要自己手写遍历逻辑,出错概率低
  • 自动处理输入末尾的换行符,不会参与价格计算
  • 输入格式不对时会给出错误提示,鲁棒性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:27:05