0
#include <iostream>
#include <fstream>
#include <cmath>
#include <bitset>
#include <limits>

using namespace std;

const int m_size = 50;


int main() {
    char buff[m_size];
    char total[m_size];
    char fcat[m_size];
    char ch;
    int sign;


ifstream fin("numbers.txt");
while(!(fin.eof())) {
    fin >> buff; // считали первое слово из файла
    cout << buff;

    /*Считываем целую часть и 2 символа после запятой*/
    size_t index = 0;
    size_t d = 0;

    while (buff[index] != 'E') {
        total[d++] = buff[index++];
    }
    total[d++] = '\0';

    d = 0;
    index++;
    if (buff[index++] == '-') {
        sign = -1;
    }
    else {
        sign = 1;
    }

    while (buff[index] != '\0') {
        fcat[d++] = buff[index++];
    }
    fcat[d] = '\0';

    int degree = atoi(fcat) * sign;
    long long numbers;
    float i_num = atof(total);
    int d_num = pow(10, degree);
    numbers = i_num * d_num;

    fin.close(); // закрываем файл
    ofstream fout("out.txt",ofstream::app); 
    fout << numbers << ' '; // запись строки в файл

    if ((ch = fin.eof()) == true) {  
        break;
        }
}
}

fin >> buff

Здравствуйте. У меня возникла проблема во время работы с файлом. Первое считывание происходит хорошо и buff сохраняются нужные мне данные, но когда должно произойти второе считывание в buff остаются старые данные. Почему это происходит и как это можно исправить ?

murlock
  • 101
  • О каком "втором считывании" вы вообще ведёте речь? У вас же входной файл закрывается сразу на первой итерации. Даже комментарий написан. – AnT stands with Russia Sep 15 '19 at 08:14

1 Answers1

2

Во-первых, вы закрываете файл

fin.close(); // закрываем файл

и после этого все, все действия с ним бессмысленны.

Во-вторых, этот способ работы

while(!(fin.eof())) {

неверен - см. Правильное использование проверки конца файла

Harry
  • 221,325
Mikhajlo
  • 12,592