移除Pascal代码中writeln()致输出异常,求正确无空行实现
Pascal程序修正:解决结果正确但多空行、删writeln出垃圾值问题
问题分析
你遇到的核心问题根源很明确:
- 多余空行就是第30行
writeln()直接导致的,删掉它就能解决空行问题,但删完后输出垃圾值,本质是变量未初始化——原程序里记录最长连续长度的变量没设初始值,保留writeln()时,函数调用碰巧让内存临时值符合预期,删掉后变量的随机初始值就暴露出来了。 - 输入
1、1、0、0时的超大数字就是未初始化变量的随机内存值。
修正后的代码
program LongestConsecutiveSequence; var current, prev, curr_count, max_count: integer; begin // 关键:初始化统计变量,彻底避免垃圾值 curr_count := 1; max_count := 1; // 用非0值初始化prev,避免和输入的0触发错误停止条件 prev := -1; // 读取第一个整数 read(current); prev := current; while true do begin read(current); // 触发停止条件:连续两个0 if (prev = 0) and (current = 0) then break; // 统计连续相同整数 if current = prev then curr_count := curr_count + 1 else begin // 更新最长连续长度 if curr_count > max_count then max_count := curr_count; curr_count := 1; end; prev := current; end; // 最后补查:防止最后一段连续序列是最长的(比如到两个0前的序列) if curr_count > max_count then max_count := curr_count; // 仅输出最终结果,无多余空行 writeln(max_count); end.
修正要点
- 变量初始化:给
curr_count(当前连续长度)和max_count(最长连续长度)设初始值1,prev设为-1(避免和输入的0冲突),从根源解决垃圾值问题。 - 移除多余输出:只在程序末尾输出最终结果,消除多余空行。
- 补全逻辑漏洞:循环结束后额外检查一次
curr_count,确保最后一段连续序列的长度被纳入最长统计(比如输入2、2、2、0、0时,不会漏掉3这个最大值)。
测试验证
输入1、1、0、0时,程序会正确统计到连续2个1,输出2且无任何多余空行;删除无关writeln()后也不会再出现垃圾值。
内容的提问来源于stack exchange,提问作者user19437199
相关产品推荐
相关产品推荐

