Для всех вас программистов там! Я пытаюсь понять, почему моя программа не работает. Я в тупике! Я пытаюсь написать программу для открытия текстового файла с именем «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;
}
Я пытаюсь выяснить, почему я получаю сообщение об ошибке.
#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;
}
Вот версия с исправленными ошибками и плохой практикой:
#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
,
Совет: я использовал бесплатный Стиль Программа для исправления отступа на что-то более понятное для меня.
У вас есть несколько ошибок:
Вы выводите «введите текст» в файл, а не в 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;
}