#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
оператор.