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

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

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

Длинная строка файла - C++

25.01.2010, 21:50. Просмотров 627. Ответов 6
Метки нет (Все метки)

Здравствуйте. Си начал изучать не так давно, поэтому имеются различные запарки. Вот одна из них. Задача длинная строка файла. Мои наброски:
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
int main(){
    char c;     
    int i=0;
    int kolvovstroke=0, number=0, vsestroki=0;
    ifstream fin("TEXT");                                
    while(fin.good()){                                    
    fin.get(c);
    if(c=='\n' || (c=='\r' && c=='\n')){                
    if(i>kolvovstroke){
        kolvovstroke=i;
        number+=1;
        i=0;
    }
    else i=0;
    }    
    ++i;
    ++vsestroki    ;
    }    
    cout<<vsestroki<<" lines"<<endl;
    cout<<"max length = "<<kolvovstroke<<" in line "<<number<<endl;
    fin.close();
    return 0;
}
Дело в том, что прога не входит в цикл while(fin.good()), ни как немогу разобраться почему.
Помогите, пожалуйста, всем откликнувшимся заранее большое спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2010, 21:50     Длинная строка файла
Посмотрите здесь:

Класс. Строка. Чтение из файла. C++
C++ при вводе из файла проверить следующая строка пустая или нет
C++ Сделать что-бы строка бралась с файла (определить отношение количества гласных букв в предложении к согласным)
Сформировать строки таким образов, что бы первой была самая короткая строка, а последней самая длинная C++
Читается только одна строка из файла C++
C++ Построчное чтение из файла, в токором первая строка пустая
C++ Дана строка S и текстовый файл. Добавить строку S в начало и конец файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.01.2010, 04:41     Длинная строка файла #2
C++
1
2
    while(fin.good()){                                    
        fin.get(c);
C++
1
    while(fin.get(c)) {
MafoR
0 / 0 / 0
Регистрация: 25.01.2010
Сообщений: 15
26.01.2010, 15:01  [ТС]     Длинная строка файла #3
Спасибо вам за помощь. Но, увы, задача все равно не работает =(выдает:
0 lines
max length = 0 in line 0
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.01.2010, 03:59     Длинная строка файла #4
C++
1
ifstream fin("TEXT");
C++
1
2
3
4
    ifstream fin("TEXT");
 
    if (!fin.is_open())
        exit(EXIT_FAILURE);
C++
1
(c=='\r' && c=='\n')
такое никогда не случится

C++
1
++vsestroki    ;
должно быть внутри if'а , который следит за переводом строки

C++
1
2
    int i=0;
    int kolvovstroke=0
слишком маленькие, могут равнятся short'у

C++
1
2
    long i = 0;
    long kolvovstroke = 0;
может быть size_t ещё
MafoR
0 / 0 / 0
Регистрация: 25.01.2010
Сообщений: 15
27.01.2010, 13:19  [ТС]     Длинная строка файла #5
Подправил прогу учитывая ваши замечания вот что получилось:
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 "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
int main(){
    ifstream fin("TEXT");
    char c;     
    long i=0, kolvovstroke=0, number=0, vsestroki=0;    cout<<"1"<<endl;    
    while(!fin.eof()){    
    fin.get(c);                    cout<<"2"<<endl;
    if(c=='\n'){                    cout<<"3"<<endl;
    if(i>kolvovstroke){
        kolvovstroke=i;
        number+=1;
        ++vsestroki;
        i=0;
    }
    else i=0;
    }    
    ++i;
    }    
    cout<<vsestroki<<" lines"<<endl;
    cout<<"max length = "<<kolvovstroke<<" in line "<<number<<endl;
    fin.close();
    return 0;
}
Прога выводит 1, а потом циклится на выводе 2. Если убрать вывод 2 то кроме 1 больше ичего не выводит. Вывод 1,2,3 это проверка на вход в циклы.
Если сделать такую поправку в коде:
ifstream fin("TEXT");

if (!fin.is_open())
exit(EXIT_FAILURE);

То она вообще ничего не выводит.
И если цикл объявить так While(fin.get(c)), то опять выводится:
0 lines
max length = 0 in line 0.
Т.е опять не входит в первый цикл. Я так полагаю, что что-то может быть не так с файлом, только вот что именно?
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.01.2010, 01:54     Длинная строка файла #6
Цитата Сообщение от MafoR
Если сделать такую поправку в коде:
C++
1
2
3
4
    ifstream fin("TEXT");
 
    if (!fin.is_open())
        exit(EXIT_FAILURE);
То она вообще ничего не выводит.
что и требовалось доказать - значит она файл вообще не открывает

C++
1
2
    while(!fin.eof()){    
        fin.get(c);
C++
1
2
    while (fin.get(c)) {
        дальше там
первый случай неправильный, потому что при ошибке чтения файла цикл повиснет
Цитата Сообщение от MafoR
а потом циклится на выводе 2
вот именно, что программа не должна циклиться никогда, даже если там ошибка (в данном случае файл не открылся)

Цитата Сообщение от accept
значит она файл вообще не открывает
проверь ещё в консоли (только не в far'е)
Код
echo %errorlevel%
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2010, 17:04     Длинная строка файла
Еще ссылки по теме:

При загрузке списка из файла дублируется последняя строка C++
C++ Двумерный массив: строка, в которой находится самая длинная серия одинаковых элементов
Не считывается строка из файла C++
Выводится лишняя строка из файла C++
C++ При чтении из файла пропускается вторая строка

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

Или воспользуйтесь поиском по форуму:
MafoR
0 / 0 / 0
Регистрация: 25.01.2010
Сообщений: 15
28.01.2010, 17:04  [ТС]     Длинная строка файла #7
Задача почти получилась, при сдаче оказалось что немного ошибается при подсчете общего количества строк. Поставили 2 балла из 3 Большое спасибо за помощь.
Вот прога:
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
int main(){
    ifstream fin;
    fin.open("TEXT.txt");
    char c;
    int kolvovstroke=0, number=1, max_line=0, i=0;
    while(fin.good()){ 
        fin.get(c);
        if(c=='\n'){ 
            if(i>kolvovstroke){
                kolvovstroke=i;
                max_line=number;
            }
            i=0;
            ++number;
        }
        else if (c != '\r') ++i;    
    }
    if(i>kolvovstroke){
        kolvovstroke=i;
        max_line=number;
        i=0;
    }
    cout<<number<<" lines"<<endl;
    cout<<"max length = "<<kolvovstroke<<" in line "<<max_line<<endl;
    fin.close();
    return 0;
}
Yandex
Объявления
28.01.2010, 17:04     Длинная строка файла
Ответ Создать тему
Опции темы

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