неправильно считывает данные из файлов .txt

211
31 января 2018, 14:26

Добрый вечер еще раз. Программа неправильно считывает данные из файлов .txt. Хочу сразу сказать спасибо ответившему на предыдущий мой вопрос. Привожу часть кода и прошу прощения что уже приводил его сегодня:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <math.h>
#include <cmath>
#include <conio.h> 
using namespace std;
double Tnach[139][139][50];
double Temper[139][139][50];
double Temper1[139][139][50];
double Tempernach[139][139][50];
double Tut[139][139];
double Tut1[139][139];
double Tut11[139][139];
double Tut22[139][139];

int main() {
const int i = 0;

далее перечислены задействованные переменные. Потом идет считывание из файлов:

ifstream fan1;
fan1.open("pov20.txt", ios::in);
ifstream fan2;
fan2.open("nak20.txt", ios::in);
ifstream fan3;
fan3.open("h20.txt", ios::in);
ofstream fout;
fout.open("res1.txt", ofstream::out);
for (int i = 0;i<Lan;i++) {
    for (int j = 0;j<Lan;j++) {
        fan1 >> pov[i][j];
        fan2 >> nak[i][j];
        fan3 >> h[i][j];
        ber1 = pov[1][2];
        ber2 = nak[1][2];
        ber3 = h[1][2];
    }
}

и при пошаговом прохождении в окне Локальные я вижу что считываются совсем не те значения:например переменная ber1=-9.25+61 В файлах находятся совсем другие значения. Переменные ber1, ber2 и ber3 были специально мною вставлены чтобы проверить какие значения он считывает из файлов. Совсем не те. Поэтому вопрос: он явно не читает то что нужно: почему? И откуда берет то что показывает мне?

Answer 1
ber1 = pov[1][2];
ber2 = nak[1][2];
ber3 = h[1][2];

Эти данные считываются в теле цикла, а именно на первой итерации тогда, когда именно эти элементы матрицы еще не заполнены и там хранится "мусор"

Answer 2

Цитирую самый первый свой комментарий: "Еще бы посмотреть на содержимое файлов."

Они же с запятыми вместо точек! Еще и в юникоде! Там же каждый второй байт - нулевой!

Допишите проверку на корректность ввода:

if (!(fan1 >> pov[i][j])) cout << "Error fan1\n";
if (!(fan2 >> nak[i][j])) cout << "Error fan2\n";
if (!(fan3 >> h[i][j]))   cout << "Error fan3\n";

и убедитесь, что там вообще ничего не читается!

Словом, чтоб вам не переписывать все для работы с Unicode и локалями - откройте в каком-нибудь Блокноте, замените все запятые на точки и сохраните как ANSI, а не Unicode.

READ ALSO
Visual Studio 2015 Подвисает

Visual Studio 2015 Подвисает

Как исправить подвисания программы Visual Studio 2015?

235
Не компилируется microsip

Не компилируется microsip

Сырцы беру отсюда там уже лежит полный проект скомпилировал на visual studio 2017 с SDK 81

256
Как преобразовать QLayoutItem в QLineEdit?

Как преобразовать QLayoutItem в QLineEdit?

Имеется слой QGridLayot на нем расположены виджеты QLineEditЯ пытаюсь вытащить эти QLineEdit и считать/изменить их текст

243