Pascal逐字符读取实现行单词计数:循环未响应换行问题求助
Pascal逐字符统计每行单词数的修正方案
原代码的核心问题
- 换行符判断错误:原代码中
c <> '#13'是将#13作为字符串比较,而Pascal中字符常量直接用#13表示回车符,不需要加引号。 - 单词统计逻辑缺陷:遇到空格就累加计数,会导致连续空格重复统计;初始值设为1,在空行或开头有空格时会出现错误计数。
修正后的代码
program WordCountPerLine; var c: char; wordCount: integer; inWord: boolean; // 标记当前是否处于单词中 begin wordCount := 0; inWord := false; writeln('Enter your string (press Enter to finish):'); // 逐字符读取,直到遇到回车符终止 repeat read(c); if c = ' ' then inWord := false else if c <> #13 then begin if not inWord then begin wordCount := wordCount + 1; inWord := true; end; end; until c = #13; writeln('Word count: ', wordCount); end.
代码说明
- 使用
repeat...until循环,确保至少读取一次字符,当遇到#13(回车符)时终止循环,解决原循环无法被换行中断的问题。 - 新增
inWord状态变量:- 读到空格时,标记为不在单词中;
- 读到非空格且非回车的字符时,若之前不在单词内,说明是新单词的起始,计数加1并标记为在单词中,避免连续空格重复统计。
- 初始计数设为0,空行时会输出0,符合实际统计逻辑。
内容的提问来源于stack exchange,提问作者Илья
相关产品推荐
相关产品推荐

