2011-03-13 73 views
0

fopen.c中有一個錯誤,我該如何解決它? 將argv [1],argv [2]分配給ft,fs時出錯。如何使用命令參數?

int main (int argc, char *argv[]) 
{ 
    //FILE *fs, *ft ; 
    char ch ; 
    //ft = fopen ("d:\\out.txt", "w") ;   

    fs = fopen(argv[1], "r"); 
    if (fs == NULL)  {    
    puts ("Cannot open source file") ;       
    exit(1) ; 
    } 
    //fs = fopen("d:\in_file.txt","r") ; 

    ft = fopen(argv[2], "w"); 
    if (ft == NULL){    
    puts ("Cannot open target file") ;    
    exit(1) ; 
    } 
} 
+5

你應該檢查'argc';它是在命令行上傳遞的參數的計數。你的代碼可能不存在時訪問'argv [1]'和'argv [2]'。另外,「賦值錯誤」是什麼意思?什麼錯誤?據我所知,這裏沒有任何mindreaders,我們也看不到你的顯示器。 – 2011-03-13 20:46:34

+1

現在* ft *和* fs *不存在,因爲它們的聲明在代碼中被註釋掉了。 – karlphillip 2011-03-13 21:00:19

回答

0

這適用於我。這是一個將元音和換行符('\ n')從第一個參數中指定的文件複製到第二個參數中的文件的程序。

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

int main(int argc, char **argv) { 
    FILE *fi, *fo; 
    if (argc != 3) { 
    fprintf(stderr, "syntax: %s in out\n", argv[0][0]?argv[0]:"program"); 
    fprintf(stderr, "copies vowels and linefeeds from in to out\n"); 
    exit(EXIT_FAILURE); 
    } 
    fi = fopen(argv[1], "r"); 
    if (!fi) { 
    perror("input file"); 
    exit(EXIT_FAILURE); 
    } else { 
    fo = fopen(argv[2], "w"); 
    if (!fo) { 
     perror("output file"); 
     exit(EXIT_FAILURE); 
    } else { 
     int ch; 
     while ((ch = fgetc(fi)) != EOF) { 
     switch (ch) { 
      case 'a': case 'e': case 'i': 
      case 'o': case 'u': case '\n': 
       fputc(ch, fo); 
       break; 
      default: 
       break; /* do nothing */ 
     } 
     } 
     fclose(fo); 
    } 
    fclose(fi); 
    } 
    return 0; 
} 

當我與源運行它上面作爲輸入(./a.out 5292243.c 5292243.vowels),所得到的文件包含

 
iueio 
iuei 

iaiiaaa 
io 
ia 
ieaiouaaoa 
ieoieoeaieeeoioou 
ei 

ioea 
ii 
eoiuie 
ei 
ee 
ooea 
io 
eoouuie 
ei 
ee 
i 
ieei 
i 
aeaaeeaei 
aeoaeuaeuo 
eaueaooi 


oeo 

oei 

eu 

+0

當應用於標準過濾器(使用'stdin'輸入和'stdout'輸出)而不是命令行參數時,這個功能當然更好。 – pmg 2011-03-14 00:29:16

1

首先,代碼中存在巨大的縮進問題。請解決它。 [編輯:現在可以]

二,什麼樣的錯誤? fs和ft都等於NULL? 而不是使用put來顯示錯誤消息,你可以使用perror(const char * s)。這會在知道errno變量統計信息的情況下向您的消息添加信息。

+0

你發佈的內容不是問題的答案。如果由於模糊/定義不清楚而無法回答問題,請在評論中註明(或標記問題是否不恰當)。 – Mat 2011-03-13 20:48:40

+0

+1 for'perror' – pmg 2011-03-13 20:49:36

+0

首先,我的命令行有3個參數:> compilefex in_file.txt out.txt ,,,該程序運行良好,沒有命令參數,它從D輸入infile並將其作爲outfile輸出看到註釋顯示,但在使用命令參數後,似乎fs和ft不取值argv [1]和argv [2] – duaa 2011-03-13 21:09:08