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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
drogbaman
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 38
#1

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

31.05.2014, 22:37. Просмотров 433. Ответов 8
Метки нет (Все метки)

Программа, которая считывает текст из файла и выводит его на экран, заменив цифры от "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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 22:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание из файла С++ (C++):

Заменить считывание с клавиатуры на считывание из файла - C++
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что делать. Почитал в интернете, попробовал, не...

Считывание файла в массив и запись нового файла - C++
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и сразу они переписываются в другой файл. В...

считывание из файла - C++
привет всем. полазил по форуму но так и не понял как считывать с файла для моей задачи.. как считать из файла чтоб можно было потом...

Считывание с файла - C++
2 3 4 5 3 2 9 4 4 5 5 1 2 8 7 0 1 9 2 3 4 3 8 1 5 1 4 2 7 9 4 0 0 7 7 1 9 5 8 5 8 3 0 1 4 8 9 3 4 1 7 7 1 3 3 7 0 1 3 1 0...

Считывание из файла - C++
Помогите пожалуйста! Почему не работает? Нужно считать из файла в двумерный массив матрицу состоящую из 0 и 1. char **table; ...

Считывание из файла - C++
Здравствуйте! Такой вопрос. Как можно считать информацию из файла следующим образом: в текстовом файле имеется 3 столбца, мне же нужно...

8
Psilon
Master of Orion
Эксперт .NET
5896 / 4793 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 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;
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.
0
Psilon
Master of Orion
Эксперт .NET
5896 / 4793 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 5
Завершенные тесты: 4
01.06.2014, 00:27 #4
kivalrd, парсить.
0
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();
То у меня считывается только до первого пробела, т.е. не построчно. А как можно построчно считать? Я уже бьюсь над этой проблемой второй день, перерыл весь интернет и форум...
0
Psilon
Master of Orion
Эксперт .NET
5896 / 4793 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 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;
        }
так вы вряд ли что считаете из файла..
0
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;
      ....
 }
И при таком считывании в каждое поле структуры заносятся данные до пробела, как конца строки. Приходится заполнять данные в файл без пробелов.
Вот как построчно считать, вместе с пробелами, до перехода на новую строку?
0
alsav22
5421 / 4816 / 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);
...
1
kivalrd
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 50
01.06.2014, 05:42 #9
alsav22, фух, спасибо огромное! Вот не получалось у меня посредством getline, интежер запишет, а потом какая-то каша... а оказывается всё из-за того, что не извлекал '\n' из потока. Просто я и не знал как это сделать в случае чтения с файла, и даже не предполагал, что из-за этого у меня ничего не получалось.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 05:42
Привет! Вот еще темы с ответами:

Считывание с файла ! - C++
Всем доброе врямя суток ! Помогите пожалуйста мне надо чтобы прога считывала из файла не до пробела а запихивала в символьный массив прям...

Считывание с файла - C++
Прогррамма неверно считывает числа с файла.вот кусок программы int mass_in_3(int *k,int *j) { int array; FILE *f1; ...

Считывание из файла - C++
есть файл с настройками prog.conf вида: date = 01.02.2010 time = 15:05:45 step = 0.5 ... есть переменные: day, month, year,...

Считывание с файла - C++
Суть задачи такова дан файл test.txt нужно вывести на экран число таких групп букв, которые начинаются и кончаются одной и тойже...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
01.06.2014, 05:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru