回 帖 发 新 帖 刷新版面

主题:请教关于一个文件输入输出问题,百思不得其解

请大家帮我分析一下这个程序
ar s,g:text;
    a:integer ;

   begin
     assign(s,'po.txt');     assign(g,'pl.txt');
     reset(s);  rewrite(g);
     while not  eof(s) do
       begin
         while not eoln(s) do
           begin
             read(s,a);

             write(g,a);
           end;
           readln(s);
        writeln(g);
       end;
     close(s);   close(g);
我的测试输入文件po.txt
5
4
3
执行完我的程序后输出文件(pl.txt)为什么是
5
4
3
0
我本想实现两个文件的复制操作

回复列表 (共5个回复)

沙发

不会 阿     不明白 阿       我也遇到相同问题了也

板凳

这样改,你再试试!!!!!!(a应为CHAR类型)
var s,g:text;
    a:char;
   begin
     assign(s,'po.txt');     assign(g,'pl.txt');
     reset(s);  rewrite(g);
     while not  eof(s) do
       begin
         if not eoln(s)  then
           begin
             read(s,a);
             write(g,a);
           end;
           readln(s);
        writeln(g);
       end;
     close(s);   close(g);
   end.

3 楼

请问一下2楼,为什么把a改为char类型就好了呢,为什么,不理解

4 楼

这个根本问题是在于,输入数据里有多余的空格而空行
当离文件结束还有一个空格时,eof(s)的值还是为false,
这时如果要强制读入一个整数,就会出现多一个零的情况
建议:
把eof改成seekeof,把eoln改成seeleoln

5 楼

我同意楼上的观点,的确就是这个问题引起的,你在文件后面有空格就会出现这种问题

但你要是在文件后面多几个回车符是不会出现这个问题的

我来回复

您尚未登录,请登录后再回复。点此登录或注册