Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
1

Посимвольное чтение из файла

09.05.2013, 16:17. Просмотров 2807. Ответов 26
Метки нет (Все метки)

Всем добрый вечер (ночь)! Так сложилась ситуация что нужно мне посимвольно считать текст из файла fin в массив str[i][j], причем считывать надо только ДО символа переноса строки \n(включительно). Скажите пожалуйста почему не работает мой фрагмент (где-то зацикливается):
C++
1
2
3
4
5
6
7
8
9
10
11
while (!feof(fin))
    {
        do
        {
            str[i][j]=fgetc(fin);
            j++;
        }
        while (str[i][j]!='\n');
        i++;
        j=0;
    }
Добавлено через 20 часов 24 минуты
По ходу выполнения чтения в str[0][0] записывается ноль и больше ничего не происходит. В чем косяк?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 16:17
Ответы с готовыми решениями:

Посимвольное чтение файла в вектор
Вечер добрый. Есть файл sir.in.txt, содержащий строку ABC; посимвольно...

Посимвольное чтение
В консоль подается текст содержащий такие выражения: а=3 b=7 z=32 a=1...

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

Посимвольное чтение строки типа string
Здравствуйте! Подскажите, пожалуйста. У меня есть строка типа string, нужно...

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

26
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 18:30 21
Цитата Сообщение от stima Посмотреть сообщение
for (int i = 0, c = 0; (c = fgetc(fin)) != EOF; ++i)
{
* * *int j = 0;
* * *for ( ;str[i][j] != '\n'; ++j)
* * *{
* * * * * str[i][j] = c;
* * *}
* * *str[i][j] = 0;
}
лучше такое проверять,ибо оно не работает. Вообще сложно понять,что эта подпрограмма делает. Прочитали один раз с, а что происходит во внутреннем цикле?
0
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 19:20  [ТС] 22
Ура! Текст считывается в том же формате, пускай даже не посимвольно. Вывод на экран идет правильно, а вот вывод в другой файл не работает(в конечном файле одни пробелы).
C++
1
2
3
4
5
6
7
8
9
10
ifstream fin(input);
ofstream fout(output);
while (! fin.eof())
{
    fin.getline(str[i],sizeof(str[i]));
    cout.write(str[i],sizeof(str[i]));
    i++;
}
for (k=0;k<i;k++)
    fout.write(str[i],sizeof(str[i]));
0
programina
2050 / 605 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.05.2013, 19:25 23
undestroyer, используй
C++
c = fin.get();
если хочешь по одному символу.
0
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 19:37  [ТС] 24
Цитата Сообщение от programina Посмотреть сообщение
undestroyer, используй
C++
c = fin.get();
если хочешь по одному символу.
"если что-то работает и работает правильно - не трогай! сломаешь!" (с) Кто-то из великих
сейчас я хочу понять почему в конечный файл не записывались символы
0
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 19:43 25
undestroyer, потому что не забывайте закрывать файлы!
0
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 19:45  [ТС] 26
Цитата Сообщение от metaluga145 Посмотреть сообщение
undestroyer, потому что не забывайте закрывать файлы!
C++
1
2
fin.close();
fout.close();
стоят практически в самом конце функции
0
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 20:20  [ТС] 27
вот весь код программы:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
 
using namespace std;
 
void main()
{
    char input[32],output[32];
    char str[10][80]={'#0'};
    int i=0,n,j=0,k=0,l=0,buff1,buff2,err[10][2]={-1};
    bool point=1;
    for(i=0; i<10;i++)
        err[i][0]=i;
    
    setlocale(LC_ALL,"Russian");
    cout<<"путь к файлу с исходными текстом:";
    cin.getline(input,32);
    cout<<"путь и имя файла для сохранения обработанного текста:";
    cin.getline(output,32);
    ifstream fin(input);
    ofstream fout(output);
    cout<<"Текст из файла:\n";
    i=0;
 
    while (! fin.eof())
    {
        fin.getline(str[i],sizeof(str[i]));
        cout.write(str[i],sizeof(str[i]));
        i++;
    }
 
    for (k=0;k<i;k++)
        fout.write(str[i],sizeof(str[i]));
 
    for(k=0;k<i;k++)
        for (j=0;str[k][j]!='\0';j++)
            if (str[k][j]=='0')
                if ((str[k][j-1]!='0')&&(str[k][j-1]!='1')&&(str[k][j-1]!='2')&&(str[k][j-1]!='3')&&(str[k][j-1]!='4')&&
                    (str[k][j-1]!='5')&&(str[k][j-1]!='6')&&(str[k][j-1]!='7')&&(str[k][j-1]!='8')&&(str[k][j-1]!='9')&&(str[k][j-1]!='.'))
                    if (str[k][j+1]!='.') 
                    {
                        str[k][j]=' ';
                        err[k][1]++;
                    }
 
    n=0;
    j=0;
    do
    {
        for (n=0; n<i;n++)
        {
            point=0;
            if (err[n][1]>err[n+1][1])
            {
                buff1=err[n][0];
                buff2=err[n][1];
                err[n][0]=err[n+1][0];
                err[n][1]=err[n+1][1];
                err[n+1][0]=buff1;
                err[n+1][1]=buff2;
                point=1;
            }
        }
    }
    while (point==1);
 
    cout<<"убираем лишние нули:\n";
    for(n=0;n<i;n++)
    {
        for (j=0;str[err[n][0]][j]!='\0';j++)
            if (str[err[n][0]][j]!=' ')
            {
            cout<<str[err[n][0]][j];
            fout.put(str[err[n][0]][j]);
            }
        cout<<"\n";
        fout.put('\n');
    }
    fin.close();
    fout.close();
    system ("pause");
}
Получает на входе текстовый файл (не более 10х80), в файле убирает начальные незначащие нули из чисел, сортирует строки в порядке возрастания количества удалений и сохраняет в отдельный файл.
что работает: получение текста из файла, удаление лишних нулей, сортировка строк(?).
что НЕ работает: вывод конечной информации в итоговый файл (не пойму откуда появляются пробелы перед текстом, теряет 1 строку) скриншот приложен
0
Миниатюры
Посимвольное чтение из файла  
09.05.2013, 20:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 20:20

Как создать посимвольное чтение строки и загнать в массив
В консоль подается строка вида &quot;()(()))((&quot;, нужно создать динамический массив...

Посимвольное считывание из файла
Нужно считать данные из файла посимвольно, при этом не все подряд, а, например...

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


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

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