亚洲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í)卻老是出錯,請幫忙看看是怎么回事。謝謝!
  1. /* ex7, ch13, cl ver. */

  2. #include <stdio.h>
  3. #include <stdlib.h>

  4. #define MAX 256

  5. int main(int argc, char *argv[])
  6. {
  7.         FILE * f1, *f2, *fp1, *fp2;
  8.         char buf1[MAX], buf2[MAX], ch, *buf = buf1;                 //buf用作將從文件1中讀出的一行去除換行符
  9.               long cnt1 = 0, cnt2 = 0;

  10.         if(argc != 3)
  11.         {
  12.                 printf("Usage: %s file1 file2", argv[0]);
  13.                 exit(EXIT_FAILURE);
  14.         }
  15.         if((f1 = fopen(argv[1], "r")) == NULL)
  16.         {
  17.                 fprintf(stderr, "Error opening %s", argv[1]);
  18.                 exit(EXIT_FAILURE);
  19.         }
  20.         if((f2 = fopen(argv[2], "r")) == NULL)
  21.         {
  22.                 fprintf(stderr, "Error opening %s", argv[2]);
  23.                 exit(EXIT_FAILURE);
  24.         }
  25.         while((ch = getc(f1)) != EOF)         //以下是判斷哪個(gè)文件行數(shù)較多,將行數(shù)多的文件作為文件1
  26.                 cnt1++;
  27.         while((ch = getc(f2)) != EOF)
  28.                 cnt2++;
  29.         if(cnt1 >= cnt2)
  30.         {
  31.                 fp1 = f1;
  32.                 fp2 = f2;
  33.         }
  34.         else
  35.         {
  36.                 fp1 = f2;
  37.                 fp2 = f1;
  38.         }
  39.         rewind(f1);                                   //文件指針位置歸零
  40.         rewind(f2);
  41.         while(fgets(buf, MAX, fp1) != NULL)                         //從文件1中讀取一行
  42.         {
  43.                 while(*++buf != '\n')                                  //打印出這一行中除了換行符之外其他字符,問題也許就出在這里
  44.                                putchar(*buf);
  45.                 printf(" ");                                                  //兩行在同一行打印,用空格隔開,以示區(qū)別
  46.                 while(fgets(buf2, MAX, fp2) != NULL)         //從文件2中讀取一行并接著剛從文件1讀出并打印的那一行接著打印
  47.                 {
  48.                         puts(buf2);
  49.                         break;
  50.                 }
  51.         }
  52.         fclose(f1);
  53.         fclose(f2);

  54.         puts("\nEnd of Program.");

  55.         return 0;
  56. }
復(fù)制代碼

作者: mcmay    時(shí)間: 2013-09-22 17:36
呵呵,我想出來了。原來問題出在這里。
  1. /* ex7, ch13, cl ver. */

  2. #include <stdio.h>
  3. #include <stdlib.h>

  4. #define MAX 256

  5. int main(int argc, char *argv[])
  6. {
  7.         FILE * f1, *f2, *fp1, *fp2;
  8.         char buf1[MAX], buf2[MAX], ch, *buf;        //這里的buf也不用初始化了,后面再說
  9.         long cnt1 = 0, cnt2 = 0;

  10.         if(argc != 3)
  11.         {
  12.                 printf("Usage: %s file1 file2", argv[0]);
  13.                 exit(EXIT_FAILURE);
  14.         }
  15.         if((f1 = fopen(argv[1], "r")) == NULL)
  16.         {
  17.                 fprintf(stderr, "Error opening %s", argv[1]);
  18.                 exit(EXIT_FAILURE);
  19.         }
  20.         if((f2 = fopen(argv[2], "r")) == NULL)
  21.         {
  22.                 fprintf(stderr, "Error opening %s", argv[2]);
  23.                 exit(EXIT_FAILURE);
  24.         }
  25.         while((ch = getc(f1)) != EOF)
  26.                 cnt1++;
  27.         while((ch = getc(f2)) != EOF)
  28.                 cnt2++;
  29.         if(cnt1 >= cnt2)
  30.         {
  31.                 fp1 = f1;
  32.                 fp2 = f2;
  33.         }
  34.         else
  35.         {
  36.                 fp1 = f2;
  37.                 fp2 = f1;
  38.         }
  39.         rewind(f1);
  40.         rewind(f2);
  41.         while(fgets(buf1, MAX, fp1) != NULL)
  42.         {
  43.         buf = buf1;     //buf經(jīng)過一次循環(huán)之后所指向的是上一次打印的字符數(shù)組的最后一個(gè)元素,需要將其還原成新數(shù)組的首元素地址
  44.                 while(*++buf != '\n')
  45.             putchar(*buf);
  46.                 printf(" ");
  47.                 while(fgets(buf2, MAX, fp2) != NULL)
  48.                 {
  49.                         puts(buf2);
  50.                         break;
  51.                 }
  52.         }
  53.         fclose(f1);
  54.         fclose(f2);

  55.         puts("\nEnd of Program.");

  56.         return 0;
  57. }
復(fù)制代碼





歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2