Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2009, 21:44   #1
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию не могу найти ошибку в коде

вот код
прога должна считать кол-во встречающихся строчных английских букв в своем исходнике
выдает неправильные данные(а-8 остальные по нулю)
Код:
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
int main()
{
    ifstream in;
    int count;
    in.open("untitled4.cpp");
    if(in.fail()) exit(1);
    char ch,ch1;
    for(ch1='a';ch1<='z';ch1++)
    {
         count=0;                      
         in.seekg(0,ios::beg);                      
         while(in.get(ch))
         {
            if(ch==ch1) count++;
         }
         cout<<ch1<<" "<<count<<" raz\n";
   }
   getch();
   return 0;
}

Последний раз редактировалось pavelstraut; 24.07.2009 в 21:49.
pavelstraut вне форума Ответить с цитированием
Старый 24.07.2009, 22:46   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pavelstraut Посмотреть сообщение
вот код
прога должна считать кол-во встречающихся строчных английских букв в своем исходнике
выдает неправильные данные(а-8 остальные по нулю)
Код:
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
int main()
{
    ifstream in;
    int count;
    in.open("untitled4.cpp");
    if(in.fail()) exit(1);
    char ch,ch1;
    for(ch1='a';ch1<='z';ch1++)
    {
         count=0;                      
         in.seekg(0,ios::beg);                      
         while(in.get(ch))
         {
            if(ch==ch1) count++;
         }
         cout<<ch1<<" "<<count<<" raz\n";
   }
   getch();
   return 0;
}
Честно говоря не специалист в STL и потому не скажу почему именно так происходит, если не ошибаюсь, там что-то связано с установкой какого-то флага, мне кажется что-то подобное уже обсуждалось здесь, но если после in.seekg(0, ios::beg); добавить ещё раз вызов этой ф-ции, то всё работает )
Код:
in.seekg(0, ios::beg);
in.seekg(0, ios::beg);
netrino вне форума Ответить с цитированием
Старый 24.07.2009, 22:50   #3
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

неа неработает после повторного установления
тоже самое выдает
pavelstraut вне форума Ответить с цитированием
Старый 24.07.2009, 23:05   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pavelstraut Посмотреть сообщение
неа неработает после повторного установления
тоже самое выдает
Вы правы, когда попробовал с другим заголовочником то не помогло
Почитал исходники iostream.h и нашёл там ф-цию void clear(int = 0);

Код:
in.clear();
in.seekg(0, ios::beg);
netrino вне форума Ответить с цитированием
Старый 24.07.2009, 23:11   #5
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

спасибо огромное
а что фунцкция эта делает очищает входной поток?
pavelstraut вне форума Ответить с цитированием
Старый 24.07.2009, 23:20   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pavelstraut Посмотреть сообщение
спасибо огромное
а что фунцкция эта делает очищает входной поток?
Значит так, насколько я понял, по достижении конца файла выставляется флаг eof и при вызове ф-ции seekg из-за него ф-ция не выполняется...
clear(int) выполняет установку флагов
Цитата:
ios::clear public member function
void clear ( iostate state = goodbit );

Set error state flags

Sets a new value for the error control state.

All the bits in the control state are replaced by the new ones; The value existing before the call has no effect.

If the function is called with goodbit as argument (which is the default value) all error flags are cleared.

The current state can be obtained with member function rdstate.

Parameters
state
An object of type ios_base::iostate that can take as value any combination of the following state flag member constants:

flag value indicates
eofbit - End-Of-File reached while performing an extracting operation on an input stream.
failbit - The last input operation failed because of an error related to the internal logic of the operation itself.
badbit - Error due to the failure of an input/output operation on the stream buffer.
goodbit - No error. Represents the absence of all the above (the value zero).



These values are declared as static member constants in the parent class ios_base.

More than one state flag can be combined using the bitwise | (or) operator.

If this parameter is not specified, goodbit is assumed, so that any existing error state value is cleared.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку в коде! Natasha666 Помощь студентам 1 20.05.2009 09:27
помогите найти ошибку в коде xaero93 Помощь студентам 4 20.04.2009 16:05
Помогите найти ошибку в коде Jora_Kornev Общие вопросы Delphi 10 10.01.2009 17:00
Помогите найти ошибку в коде! alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 1 27.12.2008 18:31
Памагите найти ошибку в коде...С++ Goblin Помощь студентам 1 13.05.2008 18:15