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

Pascal逐字符读取实现行单词计数:循环未响应换行问题求助

Pascal逐字符统计每行单词数的修正方案

原代码的核心问题

  1. 换行符判断错误:原代码中c <> '#13'是将#13作为字符串比较,而Pascal中字符常量直接用#13表示回车符,不需要加引号。
  2. 单词统计逻辑缺陷:遇到空格就累加计数,会导致连续空格重复统计;初始值设为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,提问作者Илья

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:45:28