小学pascal问题,高手解答
我是个pascal学者,小学生,问下read语句和readln语句的区别。详细!所有区别请全说,谢谢!要详细~!~!!!所有区别哦~求助求助!...
我是个pascal学者,小学生,问下read语句和readln语句的区别。详细!所有区别请全说,谢谢!要详细~!~!!! 所有区别哦~ 求助求助!
展开
2个回答
展开全部
这两个语句都是用来读入的语句,那么他们有什么不同呢?这要从两种情况来分析. 首先是从键盘读入的情况.
这种情况下,我们要明确键盘读入时候的读入方法.
我们可以这样看:键盘读入的时候会有一个buffer区,此时,每按一次回车,输入的内容都存储在buffer区中.此时,Read和ReadLn都是从buffer区读入.一但buffer区为空,这时程序就会再次要求用户输入.程序开始的时候buffer区为空,所以开始的时候只要用Read和ReadLn,就一定会要求输入.
那么Read和ReadLn有什么区别呢?区别就在于,Read只是清除buffer区中它读过的内容,而ReadLn在读入之后会清除整个buffer区. 我们来看下面两个例子: ReadLn(a, b, c); Read(d); 以及
Read(a, b, c); ReadLn(d);
同样是输入1 2 3 4(回车),第一个程序将会要求你继续输入,而第二个程序不会. 我们来看一下他们是如何工作的. 第一个程序
首先执行第一条语句,此时buffer区为空,所以请求输入.用户输入1 2 3 4,此时buffer区为1 2 3 4(这只是个例子,大家不用了解buffer区实际上是如何存储的).然后第一条语句开始工作,读入1 2 3,此时buffer区剩下一个4,a b c的值分别为1 2 3.因为这是ReadLn,
所以buffer区清空.执行下一条语句的时候,buffer区是空的.所以这个程序将要求你继续输入. 第二个程序
和第一个程序一样,Read(a, b, c)将请求一次输入.输入1 2 3 4,此时buffer区为1 2 3 4.Read语句将1 2 3赋给a b c,此时buffer剩余4.但buffer不清空.这样,执行ReadLn语句的时候,就会从buffer直接读入d的值--4. 下面开始说从文件读入的情况.
文件读入和屏幕读入不同.文件读入的时候会有一个文件指针,指向哪里,下一次就会读入哪里.
此时我们还是假设一个文件内容是1 2 3 4^Z(说明:^Z代表Ctrl+Z,在文件里是不可见的,是文件结束标识符).此时仍然使用上面两个程序,只不过改为文件读入.
文件读入的时候,Read和ReadLn的不同就在于,ReadLn读入后会将文件指针移到下一行的行首,而Read只是单纯的将文件指针右移.
第一个程序此时先读入1 2 3三个数,文件指针被移动到4上.此时ReadLn将使文件指针移动到下一行,但因为文件没有下一行了,所以会移动到文件结束标识符上.此时,Read语句就无法读入任何内容,有可能造成程序卡死或者导致Input Format Error.
第二个程序读入1 2 3三个数,此时文件指针同样在4上.但是Read语句在此时不再做任何操作,所以下一次ReadLn语句仍可以读入这个4.此时程序无任何问题,a b c d的值分别为1 2 3 4.
讲到这里,可能大家都明白Read和ReadLn的基本区别了.但是其实这两个语句还可以有很多的用法.在写程序的时候多用心琢磨一下,你会自己发现更多的.
这种情况下,我们要明确键盘读入时候的读入方法.
我们可以这样看:键盘读入的时候会有一个buffer区,此时,每按一次回车,输入的内容都存储在buffer区中.此时,Read和ReadLn都是从buffer区读入.一但buffer区为空,这时程序就会再次要求用户输入.程序开始的时候buffer区为空,所以开始的时候只要用Read和ReadLn,就一定会要求输入.
那么Read和ReadLn有什么区别呢?区别就在于,Read只是清除buffer区中它读过的内容,而ReadLn在读入之后会清除整个buffer区. 我们来看下面两个例子: ReadLn(a, b, c); Read(d); 以及
Read(a, b, c); ReadLn(d);
同样是输入1 2 3 4(回车),第一个程序将会要求你继续输入,而第二个程序不会. 我们来看一下他们是如何工作的. 第一个程序
首先执行第一条语句,此时buffer区为空,所以请求输入.用户输入1 2 3 4,此时buffer区为1 2 3 4(这只是个例子,大家不用了解buffer区实际上是如何存储的).然后第一条语句开始工作,读入1 2 3,此时buffer区剩下一个4,a b c的值分别为1 2 3.因为这是ReadLn,
所以buffer区清空.执行下一条语句的时候,buffer区是空的.所以这个程序将要求你继续输入. 第二个程序
和第一个程序一样,Read(a, b, c)将请求一次输入.输入1 2 3 4,此时buffer区为1 2 3 4.Read语句将1 2 3赋给a b c,此时buffer剩余4.但buffer不清空.这样,执行ReadLn语句的时候,就会从buffer直接读入d的值--4. 下面开始说从文件读入的情况.
文件读入和屏幕读入不同.文件读入的时候会有一个文件指针,指向哪里,下一次就会读入哪里.
此时我们还是假设一个文件内容是1 2 3 4^Z(说明:^Z代表Ctrl+Z,在文件里是不可见的,是文件结束标识符).此时仍然使用上面两个程序,只不过改为文件读入.
文件读入的时候,Read和ReadLn的不同就在于,ReadLn读入后会将文件指针移到下一行的行首,而Read只是单纯的将文件指针右移.
第一个程序此时先读入1 2 3三个数,文件指针被移动到4上.此时ReadLn将使文件指针移动到下一行,但因为文件没有下一行了,所以会移动到文件结束标识符上.此时,Read语句就无法读入任何内容,有可能造成程序卡死或者导致Input Format Error.
第二个程序读入1 2 3三个数,此时文件指针同样在4上.但是Read语句在此时不再做任何操作,所以下一次ReadLn语句仍可以读入这个4.此时程序无任何问题,a b c d的值分别为1 2 3 4.
讲到这里,可能大家都明白Read和ReadLn的基本区别了.但是其实这两个语句还可以有很多的用法.在写程序的时候多用心琢磨一下,你会自己发现更多的.
追问
有点不明白呢,小学pascal,read readln,简单点答,谢谢了!
追答
其实我也不太懂的
展开全部
read&readln并无什么实质性区别,都意为读入;
但readln表示读完后换行。
eg. readln(a[i]);
但若输入是1 2 3 4的话 这样执行就只读了一个'1'进来(读完之后就换行了嘛)
所以就得
1
2
3
4
这样打。而read无限制,不换行。
若是读入的数量未到预计的量就换行,则都得换行读。
eg.
input:
1 2
3
4
程序语句:1 for i=1 to 4
2 read(ln)(a[i])
伪代码
这样的话 read的结果是1 2 3 4;readln的结果是1 3 4.
希望能帮到你。
但readln表示读完后换行。
eg. readln(a[i]);
但若输入是1 2 3 4的话 这样执行就只读了一个'1'进来(读完之后就换行了嘛)
所以就得
1
2
3
4
这样打。而read无限制,不换行。
若是读入的数量未到预计的量就换行,则都得换行读。
eg.
input:
1 2
3
4
程序语句:1 for i=1 to 4
2 read(ln)(a[i])
伪代码
这样的话 read的结果是1 2 3 4;readln的结果是1 3 4.
希望能帮到你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询