亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
請教:C語言讀寫文件問題
[打印本頁]
作者:
mcmay
時(shí)間:
2013-09-22 17:16
標(biāo)題:
請教:C語言讀寫文件問題
下面這個(gè)程序的目的是從command line接收兩個(gè)文件的文件名,然后判斷哪個(gè)文件里的文本行數(shù)較多,最后將兩個(gè)文件里的行號相同的文本打印在屏幕上的同一行里。但不知怎的,編譯通過后運(yùn)行時(shí)卻老是出錯,請幫忙看看是怎么回事。謝謝!
/* ex7, ch13, cl ver. */
#include <stdio.h>
#include <stdlib.h>
#define MAX 256
int main(int argc, char *argv[])
{
FILE * f1, *f2, *fp1, *fp2;
char buf1[MAX], buf2[MAX], ch, *buf = buf1; //buf用作將從文件1中讀出的一行去除換行符
long cnt1 = 0, cnt2 = 0;
if(argc != 3)
{
printf("Usage: %s file1 file2", argv[0]);
exit(EXIT_FAILURE);
}
if((f1 = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "Error opening %s", argv[1]);
exit(EXIT_FAILURE);
}
if((f2 = fopen(argv[2], "r")) == NULL)
{
fprintf(stderr, "Error opening %s", argv[2]);
exit(EXIT_FAILURE);
}
while((ch = getc(f1)) != EOF) //以下是判斷哪個(gè)文件行數(shù)較多,將行數(shù)多的文件作為文件1
cnt1++;
while((ch = getc(f2)) != EOF)
cnt2++;
if(cnt1 >= cnt2)
{
fp1 = f1;
fp2 = f2;
}
else
{
fp1 = f2;
fp2 = f1;
}
rewind(f1); //文件指針位置歸零
rewind(f2);
while(fgets(buf, MAX, fp1) != NULL) //從文件1中讀取一行
{
while(*++buf != '\n') //打印出這一行中除了換行符之外其他字符,問題也許就出在這里
putchar(*buf);
printf(" "); //兩行在同一行打印,用空格隔開,以示區(qū)別
while(fgets(buf2, MAX, fp2) != NULL) //從文件2中讀取一行并接著剛從文件1讀出并打印的那一行接著打印
{
puts(buf2);
break;
}
}
fclose(f1);
fclose(f2);
puts("\nEnd of Program.");
return 0;
}
復(fù)制代碼
作者:
mcmay
時(shí)間:
2013-09-22 17:36
呵呵,我想出來了。原來問題出在這里。
/* ex7, ch13, cl ver. */
#include <stdio.h>
#include <stdlib.h>
#define MAX 256
int main(int argc, char *argv[])
{
FILE * f1, *f2, *fp1, *fp2;
char buf1[MAX], buf2[MAX], ch, *buf; //這里的buf也不用初始化了,后面再說
long cnt1 = 0, cnt2 = 0;
if(argc != 3)
{
printf("Usage: %s file1 file2", argv[0]);
exit(EXIT_FAILURE);
}
if((f1 = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "Error opening %s", argv[1]);
exit(EXIT_FAILURE);
}
if((f2 = fopen(argv[2], "r")) == NULL)
{
fprintf(stderr, "Error opening %s", argv[2]);
exit(EXIT_FAILURE);
}
while((ch = getc(f1)) != EOF)
cnt1++;
while((ch = getc(f2)) != EOF)
cnt2++;
if(cnt1 >= cnt2)
{
fp1 = f1;
fp2 = f2;
}
else
{
fp1 = f2;
fp2 = f1;
}
rewind(f1);
rewind(f2);
while(fgets(buf1, MAX, fp1) != NULL)
{
buf = buf1; //buf經(jīng)過一次循環(huán)之后所指向的是上一次打印的字符數(shù)組的最后一個(gè)元素,需要將其還原成新數(shù)組的首元素地址
while(*++buf != '\n')
putchar(*buf);
printf(" ");
while(fgets(buf2, MAX, fp2) != NULL)
{
puts(buf2);
break;
}
}
fclose(f1);
fclose(f2);
puts("\nEnd of Program.");
return 0;
}
復(fù)制代碼
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2