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

C Primer Plus,编程练习 13-7,将行号相同的行打印到同一行上

2013-06-26 
C Primer Plus,编程练习题 13-7,将行号相同的行打印到同一行上#include stdio.h#include stdlib.h#inc

C Primer Plus,编程练习题 13-7,将行号相同的行打印到同一行上

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*****************************************
日期2013-5-3

编写一个打开两个文件的程序。可以使用命令行参数或者请求用户输入来获得文件名。
a. 让程序打印第一个文件的第一行、第二个文件的第一行、第一个文件的第二行、第二个文件的第二行、
以此类推,直到打印完行数较多的文件的最后一行。
b. 修改程序,把行号相同的行打印到同一行上。
*****************************************/
/*exercise b */
#define BUF 256
#define SIZE 40
int main()
{
    FILE *fp1, *fp2;
    char line1[BUF];
    char line2[BUF];
    char str1[SIZE]; //文件名
    char str2[SIZE];
    int i;

    puts("enter filename1:");
    gets(str1);
    if((fp1 = fopen(str1, "r")) == NULL)
    {
        printf("enter %s [filename]", str1);
        exit(1);
    }
    puts("enter filename2:");
    gets(str2);

    if((fp2 = fopen(str2, "r")) == NULL)
    {
        printf("enter %s [filename]", str2);
        exit(1);
    }
    i = 1;
    while(1)
    {
        if(fgets(line1, BUF, fp1) != NULL && line1[0] != '\n')
            ;
        if(fgets(line2, BUF, fp2) != NULL && line2[0] != '\n')
        {
            printf("the %d line of\n", i);
            fputs(strcat(line1, line2), stdout);
        }
        if(line2[0] = '\n' || line1[0] == '\n')
            i++;
    }
    if(fclose(fp1) != 0)
        printf("can't close the file1.\n");
    if(fclose(fp2) != 0)
        printf("can't close the file2.\n");

    return 0;
}
打开file1.txt:
djfdl
jqejfldj
epore
hhalkhf
dlljl
ddd
aaaaa
打开file2.txt:
dadfd
dfdf
dfd
d
fd
fd
f
d
f
f
d
输出:第1行djfdl
dadfd 为什么会换行啊?应该输出djfdldadfd?谢谢

[解决办法]
因为fgets会读到"\n",所有用strcat连接line1与line2的时候还是没在同一行,可以把line1的"\n
"去掉,line1[strlen(line1)-1] = '\0';

热点排行