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

C语言getop函数遇前导空格时返回'+'正常但无法识别'='的问题

问题分析与修复方案

问题根源在于你的getop()函数未在每次调用起始阶段跳过所有空白字符(空格、制表符等),导致操作符间的空格被当作有效字符返回,程序识别为未知命令。

修复方法

在getop()函数开头添加空白字符跳过逻辑,确保每次处理前先跳过所有空白,只对非空白字符进行解析。

修改后的getop()核心代码片段

#include <ctype.h>
// 假设已定义getch()、ungetch(),以及NUMBER宏

int getop(char s[]) {
    int i, c;

    // 跳过所有空白字符(空格、制表符)
    while ((s[0] = c = getch()) == ' ' || c == '\t')
        ;
    s[1] = '\0';

    // 处理操作符或命令(非数字、非小数点)
    if (!isdigit(c) && c != '.') {
        return c; // 返回'+'、'='等操作符/命令
    }

    // 解析数字的整数部分
    i = 0;
    if (isdigit(c)) {
        while (isdigit(s[++i] = c = getch()))
            ;
    }
    // 解析数字的小数部分
    if (c == '.') {
        while (isdigit(s[++i] = c = getch()))
            ;
    }
    s[i] = '\0';
    if (c != EOF) {
        ungetch(c); // 将多余字符放回输入缓冲区
    }
    return NUMBER; // 返回数字类型标识
}

说明

  • 修改后,每次调用getop()都会先跳过所有空白字符,不会将空格当作有效返回值。
  • 输入3 4 + =时,getop()会依次返回数字3、数字4、'+'、'=',程序可正常识别并执行;输入3 4 +=时,处理逻辑不受影响,依然能正确解析'+'和'='。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:04:55