首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C Primer Plus,编程练习题 13-7中遇到的有关问题

2012-03-29 
C Primer Plus,编程练习题 13-7中遇到的问题原题目如下:编写一个打开两个文件的程序。可以使用命令行参数或

C Primer Plus,编程练习题 13-7中遇到的问题
原题目如下:
编写一个打开两个文件的程序。可以使用命令行参数或者请求用户输入来获得文件名。
a. 让程序打印第一个文件的第一行、第二个文件的第一行、第一个文件的第二行、第二个文件的第二行、以此类推,直到打印完行数较多的文件的最后一行。
b. 修改程序,把行号相同的行打印到同一行上。
下面是我自己写的代码和答案给出的代码,为了便于阅读,纠错和打开、关闭文件部分都略去了,这段代码实现的是原题目中的 b:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 256

int main (int argc, const char * argv[]) 
{
FILE * fp1;
FILE * fp2;
  //这段被屏蔽的代码是我自己的解法需要用到的变量声明
/*
  char line1[SIZE];
char line2[SIZE];
char * l1;
char * l2;
  */
  //这两行代码是答案解法中需要用到的变量声明
char ch1;
char ch2;
  //下面这段屏蔽的代码是我自己的解法,
/*while ((l1 = fgets(line1, SIZE, fp1)) != NULL || (l2 = fgets(line2, SIZE, fp2)) != NULL)
{
if (l2)
fputs(line2, stdout);
if (l1)
fputs(line1, stdout);
}*/
  //答案解法中的代码
ch1 = getc(fp1);
ch2 = getc(fp2);
while (ch1 != EOF || ch2 != EOF)
{
while (ch1 != EOF && ch1 != '\n')
{
putchar(ch1);
ch1 = getc(fp1);
}
if (ch1 != EOF)
{
putchar('\n');
ch1 = getc(fp1);
}
while (ch2 != EOF && ch2 != '\n')
{
putchar(ch2);
ch2 = getc(fp2);
}
if (ch2 != EOF)
{
putchar('\n');
ch2 = getc(fp2);
}
}
  return 0;
}
我的问题是,当用我自己的解法来实现的时候,运行结果不对,下面贴我自己的运行结果,我猜测这跟书中提到的标准输入输出(Standard I/O)和缓冲器(buffer)的原理有关,但是我自己理不清这里面的关系,不知道在程序运行的背后到底发生了什么,产生了这样的区别,2楼贴我自己的运行结果,3楼贴答案代码的运行结果,未完待续。。。


[解决办法]
晕,看的我乱的,不过应该和||运算符有关,||运算符左边为true后就不执行右边的了,所以没读取文件2的,Q上详聊吧

热点排行