Потоки ввода/вывода С++

84
28 октября 2021, 07:10

Есть вопрос по потокам ввода/вывода

код:

#include <iostream>
#include <ostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    ifstream fin("input.txt");
    char string[255];
    for (int n = 0; n < size(string); ++n)
    {
        fin >> string[n];
    }
    for (int n = 0; n < size(string) - 1; ++n)
    {
        cout << string[n];
    }
}

в файле input.txt лежит текст "Hello world 123" (без кавычек) на выходе в консоли получаю этот текст и тучу символов непонятных следом.

I need help :)

Answer 1

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

size_t const capacity{size(string)}
size_t size{capacity};
for (size_t n{}; n < capacity; ++n)
{
    fin >> string[n];
    if(not fin)
    {
        size = n;
        break;
    }
}
for (size_t n{}; n < size; ++n)
{
    cout << string[n];
}
READ ALSO
GetFocus на wxStringProperty

GetFocus на wxStringProperty

Есть таблица wxPropertyGrid с различными полями (wxStringProperty, wxUIntProperty, wxBoolProperty и тд

191
Кроссплатформенность оптимизаций

Кроссплатформенность оптимизаций

Существуют ли оптимизации компилятора, которые могут привести к изменению наблюдаемого поведения программы? Если да, то какие?

80
Непересекающиеся множества. Ошибка error C2064

Непересекающиеся множества. Ошибка error C2064

Пожалуйста, помогите мне, что я делаю не так?

104
Пара векторов или вектор пар

Пара векторов или вектор пар

Что будет производительней в общем случае: вектор пар или 2 вектора, где каждый содержит свой элемент?

106