亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3024 | 回復(fù): 1
打印 上一主題 下一主題

[C] 請(qǐng)教:C語(yǔ)言讀寫(xiě)文件問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-09-22 17:16 |只看該作者 |倒序?yàn)g覽
      下面這個(gè)程序的目的是從command line接收兩個(gè)文件的文件名,然后判斷哪個(gè)文件里的文本行數(shù)較多,最后將兩個(gè)文件里的行號(hào)相同的文本打印在屏幕上的同一行里。但不知怎的,編譯通過(guò)后運(yùn)行時(shí)卻老是出錯(cuò),請(qǐng)幫忙看看是怎么回事。謝謝!
  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')                                  //打印出這一行中除了換行符之外其他字符,問(wèn)題也許就出在這里
  44.                                putchar(*buf);
  45.                 printf(" ");                                                  //兩行在同一行打印,用空格隔開(kāi),以示區(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ù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2013-09-22 17:36 |只看該作者
呵呵,我想出來(lái)了。原來(lái)問(wèn)題出在這里。
  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也不用初始化了,后面再說(shuō)
  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)過(guò)一次循環(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ù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP