Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/84: Рейтинг темы: голосов - 84, средняя оценка - 4.54
13 / 13 / 7
Регистрация: 19.05.2012
Сообщений: 46

Чтение текстового файла

23.07.2012, 19:52. Показов 16920. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Не могу понять как читать из текстового файла значения разных типов. Вот мне например нужно считать файл с таким содержанием:
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000

Строки должны записываться в массив char или в string, а числа в double. Первые значения нормально выдает, а дальше кракозябры. Подскажите пожалуйста как решить эту проблему. Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2012, 19:52
Ответы с готовыми решениями:

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include<iostream> #include<fstream> #include<locale.h> #include<iomanip> #include <cstdlib> using namespace std; struct...

Как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла?
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

Чтение из текстового файла
Условие задачи: В текстовый фаил (c:\program\zitel.txt) записаны: - фамилия - город - улица - дом - квартира для...

12
5 / 5 / 1
Регистрация: 14.07.2012
Сообщений: 27
23.07.2012, 20:17
Считывай всё как char *, а потом проверяй по коду каждый символ. Если у какого то символа код от 48 до 57, то этот символ - цифра. Вот тебе функция, которая конвертирует.
C++
1
2
3
4
5
6
7
8
int IntToStr(char * str)
{
       stringstream ss;
       ss<<str;
       int r;
       ss>>r;
       return r;
}
1
26 / 21 / 2
Регистрация: 14.07.2012
Сообщений: 176
23.07.2012, 20:28
Возможно, дело в том, что вы считываете всё с использованием >>, однако этот оператор считывает файлы только до пробела, т. е. для чтения строки "Sam Stone" требуется два раза применить этот оператор.
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.07.2012, 20:54
Я бы на твоём месте считывал всё в string; а затем смотрел, какого типа переменную ты считал; вот здесь программа для распознавания типов.
Определение введенного типа
1
13 / 13 / 7
Регистрация: 19.05.2012
Сообщений: 46
24.07.2012, 00:31  [ТС]
Спасибо за советы, но вариант с конвертацией мне не подходит, должно считывать все сразу в свои переменные. Вот выкладываю свой код, а то я замучался уже, помогите подправить пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    struct mans
    {
       string name;
       double money;
    };
    
    fstream file;
    int number;
    double n;
    file.open("A.txt");
    file >> number;
  
    mans *p = new mans[number];
    getline(file,p -> name); 
    for (int i=0; i<number; i++)
    {
      getline(file,p -> name);
      file >> p -> money;
      p++;
    }
    p = p - number;
    
    for (int i = 0; i < number; i++)
    {
      cout << "Name: " << p -> name << endl;
      cout << "Money: " << p -> money << endl;
      p++;
    }
 
    system ("pause");
    return 0;
}
Вот результат:
Миниатюры
Чтение текстового файла  
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.07.2012, 00:38
C++
1
2
3
4
5
for (int i = 0; i < number; i++)
{
      getline(file,p[i].name);
      file >> p[i].money;
}
1
13 / 13 / 7
Регистрация: 19.05.2012
Сообщений: 46
24.07.2012, 00:47  [ТС]
Ну теперь вообще не работает) Это же динамическая структура и такая форма обращения к членам вообще не подходит или я ошибаюсь?
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.07.2012, 00:59
формат файла - строго определен, или нужно "умно распознавать", что в строке имеется ввиду?
0
13 / 13 / 7
Регистрация: 19.05.2012
Сообщений: 46
24.07.2012, 01:03  [ТС]
Строго определен, первая строка это int, дальше чередуется string и double.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.07.2012, 01:10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <fstream>
#include <string>
 
#define FILENAME "input.txt"
 
struct mans
{
    std::string name;
    double money;
};
 
int main()
{
    std::ifstream file(FILENAME);
 
    if (!file.is_open())
    {
        std::cout << "cannot open file: " << FILENAME;
        return 1;
    }
 
    std::size_t size = 0;
    (file >> size).get();
    
    mans* p = new mans[size]();
 
    for (std::size_t i = 0; i < size; ++i)
    {
        std::getline(file, p[i].name);
        (file >> p[i].money).get();
    }
 
    for (std::size_t i = 0; i < size; ++i)
        std::cout << p[i].name << '\t' << p[i].money << std::endl;
 
    delete [] p;
 
    return 0;
}
1
13 / 13 / 7
Регистрация: 19.05.2012
Сообщений: 46
24.07.2012, 01:19  [ТС]
Ура! Все работает. Большое спасибо!
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
24.07.2012, 01:39
HappyAndRu, боюсь вас разачаровать, но если кто-то залезет в "A.txt" и своими толстыми пальцами прикола ради после, например, 2000 натычет несколько пробелов, то вся затея насмарку- код не сработает. А он должен работать.

как-то так надо:
C++
1
2
3
4
5
6
7
    for (std::size_t i = 0; i < size; ++i)
    {
        std::string temp;
        std::getline(file, p[i].name);
        file >> p[i].money;
        std::getline(file, temp);
    }
1
13 / 13 / 7
Регистрация: 19.05.2012
Сообщений: 46
24.07.2012, 02:01  [ТС]
Да, действительно, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2012, 02:01
Помогаю со студенческими работами здесь

Чтение из текстового файла
вот этот кусок кода как будет выглядит на с++? begin assign(input,'input.txt'); reset(input); assign(output,'output.txt');...

Чтение текстового файла
Помогите с программой, пожалуйста. В ворде код программы, а в текстовом файле то, что должно быть на выходе.

Чтение текстового файла
Здравствуйте. Такая задача: дано текст, который должен выводится при помощи функции switch(). Например, нажимаю 1 , должна вывестись...

Чтение из текстового файла
Здравствуйте, Уважаемые форумчане. Возникла такая проблема. Надо считать из файла(внешнего) данные тип int и char- это 2 разных файла, в...

Чтение текстового файла
здравствуйте. у меня не получается считать текстовый файл. сам файл имеет имеет жесткую структуру: первая строка число(по сути колличество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru