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

