c - 两个或多个命令行参数?

标签 c parameters arguments fopen

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

附言。这是同一代码的其他 2 篇文章的延续。这不是家庭作业,我目前不在 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;
}

最佳答案

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

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

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

关于c - 两个或多个命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650760/

相关文章:

random - OCaml : exception Invalid_argument ("Random.int")? 的解决方法是什么

c++ - 如何在使用 g++ 编译器时使用 c 样式初始化结构?

c - 星号在函数指针中是可选的吗?

c - C 中的变量重用

arrays - 函数中的闭包数组参数

c - 如何在C函数中使某些参数可选

c - 为了将 tcp 程序转换为 udp 需要进行哪些更改

C# - SQL Server - ?参数和 Oledb

function - 如何在 Perl 中检查函数参数是字符串还是数组

c - 将许多参数传递给 C 函数