В настоящее время я работаю над этой программой для класса в моем университете. Я пробовал множественный подход без успеха. Я почти уверен, что это просто проблема конверсии, но я хочу понять разницу.
Что должна делать программа : Мы должны создать программу, которая запрашивает у пользователя два имени файла. Один будет входом, а другой будет выходом. Предполагается, что программа считывает ввод и записывает строку в вывод, пока не будет достигнут конец входного файла.
Мой код :
#include <iostream>
#include <fstream> //included for read/writing files
#include <string> //Included this for getline to read the file
using namespace std;
int main() {
ifstream infile; // Stream to read from input file
ofstream outfile; // Stream to write to output file
char inputfilename[80], outputfilename[80]; //declaring two character arrays to save the file names.
string text;
cout << "What is the name of your input file (text.txt)" ; // Prompting user for input file name
cin >> (inputfilename); // Getting input file
infile.open(inputfilename, ios::in); // Opening the input file.
cout << "What is the name of your output file" ; // Prompting user for output file name
cin >> (outputfilename);
outfile.open(outputfilename, ios::out);
if(!infile) { // If cannot open file
cout << "There was an error opening your file!" ;
return 1;
}
if (!outfile) {
cout << "There was an error opening your file!" ;
return 1;
}
while (infile.eof()==0) {
fgets(text, 80, infile);
fprintf(outfile,"%d. %s\n", text);
}
infile.close(); // Closing input file
outfile.close(); // Closing output file
return 0;
}
Что я пробовал : Я не знал, повлияло ли это на то, как я открыл файл. Я ранее пытался.
ifstream infile;
ofstream outfile;
char text, inputfilename[80], outputfilename[80]; <----- 1
cout << "What is the name of your input file (text.txt)" ;
gets(inputfilename); <----- 2
infile.open(inputfilename);
cout << "What is the name of your output file" ;
gets(outputfilename); <----- 2
outfile.open(outputfilename);
1) Я переключил символ, который я ранее пытался
char text
char text[80]
char *text[80]
2) Изменит ли переключение, как получение имени файла что-либо в цикле while (я ранее пробовал getline и gets)? Кроме того, "f" перед fgets / fprints / etc всегда ассоциируется с потоком файлов?
Примечание: мой учитель подсказал нам.
"Предположим, что вы прочитали строку из входного файла в строковую переменную с именем str, используя следующую инструкцию: fgets (str, 80, infile); Вы можете добавить номер строки и сохранить строку с номером строки в выходных данных. файл с использованием того же оператора, используя: fprintf (outfile, "% d.% s \ n", Next_line_number ++, str); "
из этого я пробовал:
while (infile.eof()==0) {
fgets(text, 80, infile);
fprintf(outfile,"%d. %s\n", text);
}
а также
while (infile.eof()==0) {
fgets(text, 80, infile);
fputs(text, outFile);
}
и
while (infile.eof()==0) {
getline(infile, text);
fprintf(outfile,"%d. %s\n", text);
}
Я также пытался сделать long и использовать его для увеличения номера строки. Я довольно новичок в программировании; если какой-либо из методов, которые я использую, датирован, пожалуйста, дайте мне знать (на некоторых сайтах говорилось, что fgets устарел и не поддерживается на cx11 или какой-либо версии C ++)! Я хочу понять концепции и просто запустить программирование. Следует отметить, что строки 34-35 - это место, где мой код всегда выдает ошибку, и это
не может преобразовать 'std :: __ cxx11 :: string {aka std :: __ cxx11 :: basic_string}' в 'char *' для аргумента '1' в 'char * fgets (char *, int, FILE *)'
Я подумал, что получаю это, потому что в нем есть указатель на файл, и я спрашиваю пользователя, не объявил ли файл в программе. Это вызывает преобразование, которое вызывает мою ошибку.