ifstream не читает данные в файла. система ввода и выводов
есть код:
#include <iostream>
#include <fstream>
using namespace std;
int write(string fileName_, string stringVvod_, int intVvod_ )
{
setlocale(LC_ALL, "ru");
//string fileName; - забейте
//fileName_ = fileName;
ofstream out(fileName_);
if (!out)
{
cout << "Не удалось открыть файл" << endl;
return 1;
}
// string stringVvod;
// int intVvod;
// intVvod = intVvod_;
// stringVvod = stringVvod_;
out << stringVvod_ << endl << intVvod_ << endl;
out.close();
return 0;
}
int read(string fileName_)
{
setlocale(LC_ALL, "ru");
//string fileName;
//fileName_ = fileName;
int i;
char ch;
float f;
char str[100];
ifstream in(fileName_);
if (!in)
{
cout << "Не удалось открыть файл" << endl;
return 1;
}
in >> i;
in >> f;
in >> ch;
in >> str;
cout << i << endl << f << endl << ch << endl << str << endl;
in.close();
return 0;
}
int main()
{
setlocale(LC_ALL, "ru");
write("test", "hello world!!!!", 257);
read("test");
return 0;
}
создается файл тест где вводятся "hello world!!!!" и число 257
при просмотре файла всё есть внутри, но при просмотре вылезает это:
почему не читает данные в файле?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Итак, вы записываете строку и целое число. Так?
Файл имеет вид
hello world!!!!
257
Читаете
int i;
char ch;
float f;
char str[100];
...
in >> i;
in >> f;
in >> ch;
in >> str;
Т.е. сначала вы пытаетесь читать целое число в i
. Но там находится hello
. Целое число с h
начинаться не может, поток in
переходит в состояние fail
(и все дальнейшие операции с ним вообще не выполняются), ничего не считывается, получаете, что получаете: мусор, который находился в памяти по адресам переменных.
Что заказали, то и получили...
Update
Вот простейший способ вывести на экран содержимое файла:
int read(const string& fileName_)
{
ifstream in(fileName_);
if (!in)
{
cout << "Не удалось открыть файл" << endl;
return 1;
}
in >> noskipws;
for(char ch; in >> ch; cout << ch);
return 0;
}
Или
int read(const string& fileName_)
{
ifstream in(fileName_);
if (!in)
{
cout << "Не удалось открыть файл" << endl;
return 1;
}
for(char ch; in.get(ch); cout << ch);
return 0;
}