Чтение из файла и копирование его содержимого через командную строку

#c

#c

Вопрос:

Я хочу прочитать файл и скопировать его содержимое во все файлы, которые передаются в качестве аргументов командной строки, например:

main.exe file.txt todo.txt app.txt foo.txt

Считайте данные из file1 и копируйте их содержимое в todo, app и foo. Запрашивает пользователя, если файл не существует, и запрашивает ввод, если он хочет создать файл.

Функция ReadFile работает и возвращает данные файла.

код:

 char* ReadFile(const char* filename) {...}

void WriteFile(const char* filename, const char* data) {
    FILE* fptr = fopen(filename, "r ");
    if (fptr)
        std::cout << filename << " opened Succesfully.n";
    else {
        std::cout << "nFile not found! Do you want to create one?n";
        std::cout << "Type Y, y or 1 to create the file that doesn't exist press any other key to exitn";
        std::string input;
        std::cin >> input;
        while (input.at(0) == 'Y' || input.at(0) == 'y' || input.at(0) == '1') {
            fptr = fopen(filename, "w");
            if (fptr) {
                std::cout << filename << " created Succesfullyn";
                break;
            } else {
                std::cout << "Error creating " << filename << std::endl;
                break;
            }
        }
        while (input.at(0) != 'Y' || input.at(0) != 'y' || input.at(0) != '1') {    
            exit(0);
        }
    }
    while ((*data)) {
        fputc(*data, fptr);
          data;
    }
    if (!fclose(fptr))
        std::cout << filename << " closedn";
    else 
        std::cout << "Error closing " << filename << std::endl;

}
int main(int argv, const char* argc[]) {
    const char* FileBuffer = ReadFile(argc[1]);
   
    for (int i = 2; i < 10;   i) {
        if (argc[i] != (char)0 )
            WriteFile(argc[i], FileBuffer);
    }
    return 0;
}
  

Теперь проблема в том, что всякий раз, когда я создаю несуществующий файл, он выводит: «Файл создан успешно» и завершает работу, но содержимое никогда не копируется

во-вторых: я не могу выполнить запись в файл с более чем 2 аргументами, который не существует пример :

main.exe file.txt todo.txt app.txt foo.txt

Здесь file.txt успешно прочитан, затем он спрашивает меня, хочу ли я создать файл, я ввожу «y», он печатает «Файл создан успешно» и завершает работу, но содержимое никогда не копируется

однако, если файлы существуют, код работает нормально, и содержимое копируется во все файлы

Примечание: я не использую fstream, потому что у меня проблемы с чтением и записью

Комментарии:

1. Я не думаю, что вы хотели использовать эти циклы ‘while’ для проверки ‘Yy1’. Или, по крайней мере, не таким образом. Вы не изменяете «ввод» в этих циклах.

2. @Patrick Итак, что мне делать?

3. Я совершенно уверен, что это должны быть операторы ‘if’.

Ответ №1:

Это

 while (input.at(0) != 'Y' || input.at(0) != 'y' || input.at(0) != '1')
  

всегда имеет значение true, поэтому ваша программа всегда завершается, вы хотели написать

 while (input.at(0) != 'Y' amp;amp; input.at(0) != 'y' amp;amp; input.at(0) != '1')
  

Это распространенная ошибка, связанная с неправильной логикой при объединении отрицания с and или or .

И поскольку тело цикла while всегда завершает программу, немного понятнее написать if оператор вместо while оператора.

 if (input.at(0) != 'Y' amp;amp; input.at(0) != 'y' amp;amp; input.at(0) != '1')
    exit(0);
  

Комментарии:

1. приведенное while выше также должно быть if или другим

2. @idclev463035818 Это правда, оба цикла должны быть объединены в один if else оператор.