2011-03-13 78 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