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

Pascal中Read()读取字符串存入数组时被跳过无法输入问题

问题成因

Pascal的输入函数对数值类型和字符串类型的处理逻辑存在差异:

  • 读取Integer等数值类型时,read函数会自动跳过输入缓冲区中所有前导空白字符(包括换行符、空格、制表符),因此即使前序writeln输出留下的换行符残留在缓冲区中,也不会影响正常读取,这就是你修改类型为整数后功能正常的原因。
  • 读取string类型时,read函数不会跳过前导空白字符,会直接读取缓冲区的第一个字符直到遇到下一个空白符为止。你代码中每次循环调用writeln输出提示语时会自动追加换行符,该换行符会残留在输入缓冲区,调用read(y)时会直接将这个换行符识别为输入内容,瞬间完成读取操作,表面看起来就是直接跳过了read语句没有等待输入。
解决方案

最简便的修复方式是将代码中的read(y)替换为readln(y)。readln函数会自动忽略输入缓冲区中的残留换行符,等待用户输入完整一行内容后,自动丢弃当前行末尾的换行符,完全适配字符串读取的场景。如果你需要读取包含空格的完整输入内容,这种方式也能满足需求。

修改后可正常运行的代码如下:

program temp;
var input_array : array[0..5] of string;
    k : integer;
    y : string;

begin
    for k := 0 to 5 do   
        begin
            writeln('Enter character : ');
            readln(y);
            input_array[k] := y;
        end;
    for k := 0 to 5 do             
        writeln(input_array[k]);
end.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:45:04