Форум программистов, компьютерный форум CyberForum.ru

Считывание из файла С++ - C++

Восстановить пароль Регистрация
 
drogbaman
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 38
31.05.2014, 22:37     Считывание из файла С++ #1
Программа, которая считывает текст из файла и выводит его на экран, заменив цифры от "0" до "9" словами (ноль, один два), начиная каждое предложение с новой строки.
Есть код, но не работает. Что не так может кто посмотреть?

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
#include <stdio.h>
int main(void)
 {
   char c;
    FILE *fin=fopen("input.txt", "r");
 
    while (!feof(fin))
        {
             fscanf(fin, "%c",&c);
              if (c=='0') printf("ноль"); else
              if (c=='1') printf("один"); else 
              if (c=='2') printf("два"); else
              if (c=='3') printf("три"); else
              if (c=='4') printf("четыре"); else
              if (c=='5') printf("пять"); else
              if (c=='6') printf("шесть"); else
              if (c=='7') printf("семь"); else
              if (c=='8') printf("восемь"); else
              if (c=='9') printf("девять"); else
              if (c=='.') { printf(".\n"); fscanf(fin, "%c",&c); } else
              if (c=='?') { printf("?\n"); fscanf(fin, "%c",&c); } else
              if (c=='!') { printf("!\n"); fscanf(fin, "%c",&c); } else
         printf ("%c", c);
     }
    return 0;
 }
Добавлено через 31 минуту
Окно открывается и сразу закрывается. Если дописать system ("pause") начинает говорить, что не понимает fopen и fscanf. Visual Studio 2008
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 22:37     Считывание из файла С++
Посмотрите здесь:

C++ считывание с файла
Считывание из файла C++
C++ Считывание из файла в С++
Считывание с файла C++
C++ считывание из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psilon
Master of Orion
 Аватар для Psilon
5742 / 4690 / 619
Регистрация: 10.07.2011
Сообщений: 14,162
Записей в блоге: 5
Завершенные тесты: 4
31.05.2014, 23:16     Считывание из файла С++ #2
drogbaman, ifstream/ofstream не в моде?

Добавлено через 7 минут
drogbaman,
C++
1
2
3
4
5
6
7
8
9
    char c;
    FILE* file;
    fopen_s(&file, "C:\\input.txt", "r");
    while (!feof(file))
    {
        char c = fgetc(file);
        printf("%c", c);
    }
    return 0;
kivalrd
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 50
31.05.2014, 23:32     Считывание из файла С++ #3
Psilon, а подскажите, пожалуйста, как считать из файла в структуру подобную запись:
1
Павлов И.В.
мужской
ул. Ленина 17, кв. 35
3888383
Т.е. чтобы каждая строка - это как поле структуры, учитывая разные типы данных (т.е, если 3888383 - это запись в поле с типом int, а ул. Ленина 17, кв. 35 - string).
Ну, при помощи fstream.
Psilon
Master of Orion
 Аватар для Psilon
5742 / 4690 / 619
Регистрация: 10.07.2011
Сообщений: 14,162
Записей в блоге: 5
Завершенные тесты: 4
01.06.2014, 00:27     Считывание из файла С++ #4
kivalrd, парсить.
kivalrd
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 50
01.06.2014, 00:37     Считывание из файла С++ #5
Psilon, а как это? Прошу прощение, я только в начинаниях С++. Может быть есть возможность попроще?
Пробовал c пом. функции getline. Но беда в том, что она не работает с типом integer.

Добавлено через 5 минут
Допустим, вот моя структура
C++
1
2
3
4
5
6
7
8
9
10
struct Position 
{
    int IDpos; 
    string name; 
    float salary;
    string res; 
    string req; 
};
...
Position post[p];
В файл записываю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     string filename;
    cout << "Enter name for new file: ";
    getline(cin, filename);
    cin.ignore();
    ofstream fout (filename.c_str());
for (i = 0; i < p; i++)
    {
        fout << post[i].IDpos << endl;
        fout << post[i].name << endl;
        fout << post[i].salary << endl;
        fout << post[i].res << endl;
        fout << post[i].req << endl;
    }
fout.close();
Если считывать с файла непосредственно в структуру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 string filename;
    cout << "Enter name for open file: ";
    getline(cin, filename);
    ifstream fin (filename.c_str());
    if (!fin.is_open())
    {
        cout << "File not found!" << endl;
        cin.get();
    }
    else
        for (i=0; i < p; i++)
        {
            cout << post[i].IDpos << endl;
            cout << post[i].name<< endl;
            cout << post[i].salary<< endl;
            cout << post[i].res<< endl;
            cout << post[i].req<< endl;
        }
    fin.close();
То у меня считывается только до первого пробела, т.е. не построчно. А как можно построчно считать? Я уже бьюсь над этой проблемой второй день, перерыл весь интернет и форум...
Psilon
Master of Orion
 Аватар для Psilon
5742 / 4690 / 619
Регистрация: 10.07.2011
Сообщений: 14,162
Записей в блоге: 5
Завершенные тесты: 4
01.06.2014, 02:12     Считывание из файла С++ #6
kivalrd,
C++
1
2
3
4
5
6
7
8
        for (i=0; i < p; i++)
        {
            cout << post[i].IDpos << endl;
            cout << post[i].name<< endl;
            cout << post[i].salary<< endl;
            cout << post[i].res<< endl;
            cout << post[i].req<< endl;
        }
так вы вряд ли что считаете из файла..
kivalrd
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 50
01.06.2014, 03:23     Считывание из файла С++ #7
Psilon, ой, это просто осталась запись после экспериментов, которую я в спешке сюда скопировал и не посмотрев...
Естественно, что считывал так:
C++
1
2
3
4
5
for (i=0; i < p; i++)
 {
      fin >> post[i].IDpos;
      ....
 }
И при таком считывании в каждое поле структуры заносятся данные до пробела, как конца строки. Приходится заполнять данные в файл без пробелов.
Вот как построчно считать, вместе с пробелами, до перехода на новую строку?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.06.2014, 05:07     Считывание из файла С++ #8
Цитата Сообщение от kivalrd Посмотреть сообщение
Вот как построчно считать, вместе с пробелами, до перехода на новую строку?
Там, где string:
Цитата Сообщение от kivalrd Посмотреть сообщение
c пом. функции getline
Цитата Сообщение от kivalrd Посмотреть сообщение
Но беда в том, что она не работает с типом integer
Там, где не string, с помощью fin >>.

Добавлено через 4 минуты
Только не забывать, перед getline()(после fin >>), извлекать '\n' из потока. Например, читать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Position 
{
    int IDpos; 
    string name; 
    float salary;
    string res; 
    string req; 
};
...
Position post[p];
...
(fin >> post[i].IDpos).get();
getline(fin, post[i].name);
(fin >> post[i].salary).get();
getline(fin, post[i].res);
getline(fin, post[i].req);
...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 05:42     Считывание из файла С++
Еще ссылки по теме:

считывание из файла C++
Считывание файла C++
C++ Считывание из файла

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

Или воспользуйтесь поиском по форуму:
kivalrd
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 50
01.06.2014, 05:42     Считывание из файла С++ #9
alsav22, фух, спасибо огромное! Вот не получалось у меня посредством getline, интежер запишет, а потом какая-то каша... а оказывается всё из-за того, что не извлекал '\n' из потока. Просто я и не знал как это сделать в случае чтения с файла, и даже не предполагал, что из-за этого у меня ничего не получалось.
Yandex
Объявления
01.06.2014, 05:42     Считывание из файла С++
Ответ Создать тему
Опции темы

Текущее время: 12:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru