两个或多个命令行参数?

时间:2011-12-28 00:45:11

标签: c parameters arguments fopen

我的代码最终在我的命令行中使用了一个争论,即一个文件可供使用,尽管我设计的代码的概念是使用无限数量的文件。它的作用是使用包含由空格分隔的单词的X个txt文件,并用\ n替换空格,从而创建单词列表。虽然它成功地完成了第一个参数,但当我添加两个或三个时,它会出现故障,真的想让它工作!

PS。这是同一代码中其他两篇帖子的延续。这不是一项家庭作业,我目前远离Uni,只是在我们的讲座之前尝试C文件i / o。

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

int main(int argc, char** argv) {
FILE *fpIn, *fpOut;
int i, j;
j = 1;
int c;
char myString[256];

printf("%d", argc);
printf("\n");
printf("The following arguments were passed to main(): ");
            for(i=1; i<argc; i++) printf("%s ", argv[i]);
printf("\n");

while(argc--) {
    for(i = 1; i <= argc; i++) {
        fpIn = fopen(argv[j], "rb");
        snprintf(myString, 256, "%s~[%d]", argv[j], i);
        fpOut= fopen(myString, "wb");
        while (1) {
            c = fgetc(fpIn);
            if ( c == EOF)
                break;
            if (isspace(c)) 
                c = '\n';
            fputc(c, fpOut );
        }
        j++;
    }
}
return 0;
}

2 个答案:

答案 0 :(得分:2)

看起来你有两个循环做同样的事情!

while(argc--) {
for(i = 1; i <= argc; i++) {

你真的只需要一个循环来迭代参数。如果使用while循环,则使用argc或j作为argv的索引。如果使用for循环,这是更简洁的方法,请使用for循环参数i作为argv的索引。

答案 1 :(得分:2)

for(i = 1; i <= argc; i++)

应该是

for(i = 1; i < argc; i++)

是的,我知道你从1开始,但那是因为argv[0]应该是程序调用名。