fileoutputstream — Запись строк в файл .txt Переполнение стека

Для всех вас программистов там! Я пытаюсь понять, почему моя программа не работает. Я в тупике! Я пытаюсь написать программу для открытия текстового файла с именем «CSC2134.TXT» для вывода, затем принять строки текста из консоли и записать строки текста в файл и использовать любую пустую строку для завершения программы. Вот что у меня есть:

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int main()
{
char str[80];

ofstream file1;
file1.open("CSC2134.txt");

if (file1 == 0)
{
cout << "error opening CSC2134.txt" << endl;
return 1;
}
else
{
file1 << "Enter some text:\n";
while(strlen(str) != '\n')
{
file1 << cin.getline(str,80);

if(strlen(str) == 0)
break;
}
file1.close();
}

return 0;
}

Я пытаюсь выяснить, почему я получаю сообщение об ошибке.

2

Решение

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main (){
ofstream myfile("CSC2134.txt");

if(myfile.is_open())
{
string str;
do{
getline(cin, str);
myfile<<str<< endl;
}while(str!="");
myfile.close();
}
else cerr<<"Unable to open file";

return 0;
}
1

Другие решения

Вот версия с исправленными ошибками и плохой практикой:

#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>     // EXIT_FAILURE
using namespace std;

int main()
{
auto const filename = "CSC2134.txt";
ofstream file1( filename );
if( file1.fail() )
{
cerr << "!Error opening " << filename << endl;
return EXIT_FAILURE;
}

string str;
cout << "Enter some text, with a blank last line:\n";
while( getline( cin, str ) && str != "" )
{
file1 << str << endl;
}
}

Лично я бы написал and вместо &&, но нельзя ожидать, что новичок настроит компилятор правильно, чтобы принять это. Проблема в основном с Visual C ++. Можно использовать принудительное включение <iso646.h> заставить его принять стандарт and, or а также not,

Совет: я использовал бесплатный Стиль Программа для исправления отступа на что-то более понятное для меня.

1

У вас есть несколько ошибок:

Вы выводите «введите текст» в файл, а не в cout.

Вы не выполняете цикл правильно, чтобы выйти из приложения только в том случае, если пользовательский ввод является пустой строкой.

Вот исправленная версия:

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int main()
{
char str[80];

fstream file1;
file1.open("CSC2134.txt");

if (!file1.is_open())
{
cout << "error opening CSC2134.txt" << endl;
return 1;
}
else
{
std::cout<< "Enter some text:\n";

cin.getline(str,80);
while((strlen(str) != 0) )
{

file1 << str;
cin.getline(str,80);

}
file1.close();
}

return 0;
}

Обновить:

Вместо этого запустите это и скажите мне, что выводится при запуске вашей программы:

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int main()
{
char str[80];

ofstream file1;

file1.exceptions ( ifstream::failbit | ifstream::badbit );
try {
file1.open("CSC2134.txt", fstream::in | fstream::out | fstream::binary);
}
catch (ifstream::failure e) {
cout << "Exception opening/reading file"<< e.what();
}

if (!file1.is_open())
{
cout << "error opening CSC2134.txt" << endl;
return 1;
}
else
{
std::cout<< "Enter some text:\n";

cin.getline(str,80);
while((strlen(str) != 0) )
{

file1 << str;
cin.getline(str,80);

}
file1.close();
}

return 0;
}
1
По вопросам рекламы [email protected]