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
相关产品推荐
相关产品推荐

