Два или более аргументов командной строки? - PullRequest
0 голосов
/ 28 декабря 2011

Я получил этот код, наконец-то работающий с одним аргументом в моей командной строке, то есть с одним файлом для работы с ним, хотя я разработал код с концепцией работы с неограниченным числом файлов.Что он делает, это берет некоторое количество X текстовых файлов, содержащих слова, разделенные пробелами, и заменяет пробелы на \ n, создавая таким образом список слов.Хотя он успешно завершает первый аргумент, он вызывает ошибки, когда я добавляю два или три, действительно хочу, чтобы это работало!

PS.Это продолжение двух других постов с тем же кодом.Это не домашнее задание, я в настоящее время не в универе, и просто экспериментирую с вводом-выводом C-файлов перед нашими лекциями.

#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 ]

2 голосов
/ 28 декабря 2011
for(i = 1; i <= argc; i++)

должно быть

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

Да, я знаю, что вы начинаете с 1, но это потому, что argv[0] должно быть именем вызова программы.

2 голосов
/ 28 декабря 2011

Похоже, у вас там две петли, делающие одно и то же!

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

Вам действительно нужен только один цикл для перебора аргументов. Если вы используете цикл while, тогда используйте argc или j в качестве индекса для argv. Если вы используете цикл for, который является более точным способом, используйте аргумент цикла for i в качестве индекса для argv.

...