Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2021, 21:22   #1
klayx
Новичок
Джуниор
 
Регистрация: 03.06.2021
Сообщений: 4
По умолчанию Компилятор не считывает вторую строку из файла

Всем привет, наткнулся на такую проблему. Работаю в visual studio, в папку с проектом поместил data.txt в котором в каждой строке чередуются текстовая информация и числовые значения с плавающей точкой. И вот чтобы считать их в массив я написал следующий фрагмент кода:
Цитата:
ifstream data("data.txt");
vector <pair <string, double> > b;
string s;
double x;
getline(data, s);
data >> x;
while (s != "0") {
pair <string, double> temp;
temp.first = s;
temp.second = x;
b.push_back(temp);
getline(data, s);
data >> x;
}
В конце текстового файла поставил ноль, чтобы цикл закончить. Проблема в том, что компилятор считывает только первую строку и следующее за ним числовое значение. Дальше он строки не видит, читает её как пустую, уходит в бесконечный цикл. В чём ошибка?
klayx вне форума Ответить с цитированием
Старый 04.06.2021, 00:27   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Цитата:
Сообщение от klayx Посмотреть сообщение
компилятор считывает только первую строку и следующее за ним числовое значение
Компилятор вообще ничего читать из текстового файла не должен.
Arigato вне форума Ответить с цитированием
Старый 04.06.2021, 03:03   #3
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Вот пример:
Код:
// STL C++14
// Link to this example:
// https://www.cplusplus.com/forum/begi...90/#msg1138553
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>

using TYPE = std::string;

int main()
{
    std::string filename = "in.txt";
    std::vector<std::vector<TYPE> > data;

    std::ifstream in(filename);
    for (std::string line; getline(in, line);) {
        std::stringstream ss(line);
        std::vector<TYPE> row;
        for (TYPE d; ss >> d;)
            row.push_back(d);
        data.push_back(row);
    }

    std::cout << "Input data:\n\n";
    for (auto& row : data) {
        for (auto& item : row)
            std::cout << std::setw(5) << item << ' ';
        std::cout << '\n';
    }
}
Источник: Reading a .txt file into Vector
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 04.06.2021, 08:24   #4
klayx
Новичок
Джуниор
 
Регистрация: 03.06.2021
Сообщений: 4
По умолчанию

Arigato, Почему?
klayx вне форума Ответить с цитированием
Старый 04.06.2021, 10:10   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Потому что компилятор занят компилированием, то есть переводом программы, написанной на языке высокого уровня, в машинный код.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не считывает float из файла anestezy Общие вопросы C/C++ 7 27.04.2015 19:39
Exception когда считывает с файла Natok Помощь студентам 1 22.04.2011 11:25
вывод на вторую строку экрана значения регистра Steil Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 24.05.2010 12:15