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;
}
→ Ссылка