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

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

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

маленькая прожка с ошибкой - C++

10.12.2009, 19:51. Просмотров 396. Ответов 6
Метки нет (Все метки)

компиляция проходит успешно, после запуска выдает ошибку (см вложение)
прога открывает файл, посимвольно его читает. если символ есть в массиве al, в st счетчик увеличивается, если нет - добавляет символ и тож увеличивает счетчик.
Код
 FILE *big; char s, al[55]; int t, j, n, st[55];
 big=fopen("big.txt","r");
     for(int i=0;i<55;i++) st[i]=0;
     j=0; n=0;
     while(!feof(big))
     {
       s=getc(big);
       for (int i=0;i<55;i++) if(al[i]==s){st[i]++; j++; n++; i=55;}
       if (n==0) {al[j]=s; st[j]++;} //здесь ошибка
       n=0;j++;
      }
  fclose(big);
Миниатюры
маленькая прожка с ошибкой  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.12.2009, 04:38     маленькая прожка с ошибкой #2
C
1
n=0;j++;
проверь j на переполнение за 54
Credo
0 / 0 / 0
Регистрация: 10.12.2009
Сообщений: 4
11.12.2009, 11:50  [ТС]     маленькая прожка с ошибкой #3
спасибо, accept. Переполнение таки было.но основная ошибка оказалось в другом.
вот пробный текст: "A Blu ray Disc also called BD is a high density optical disc format for the storage."
после прогонки проги получаем результат (картинка)
Вопрос: откуда берутся 'd' и как от них избавиться?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void main()
{
 FILE *big; char s,al[100]; int t,j,n,st[100];
   big=fopen("bigp.txt","r");
   for(int i=0;i<100;i++) st[i]=0;
   for(int i=0;i<100;i++) al[i]='1';
     j=0; n=0;
     while(!feof(big))
     {
       s=getc(big);
       for (int i=0;i<100;i++) if(al[i]==s)
       {
         st[i]++; j++; n++; i=100; printf("_%c",al[i]);
       }
       if (n==0) {al[j]=s; st[j]++; printf(" %c",al[j]);}
       n=0; j++;
      }
       fclose(big);
 getch();
}
Миниатюры
маленькая прожка с ошибкой  
Том Ардер
Модератор
Эксперт по математике/физике
3701 / 2314 / 286
Регистрация: 15.06.2009
Сообщений: 4,092
12.12.2009, 00:13     маленькая прожка с ошибкой #4
Строка 13
Цитата Сообщение от Credo Посмотреть сообщение
i=100; printf("_%c",al[i])
Что будет в 100-м элементе?

1)Не надо экономить строки текста
2)Логика крайне запутанная. Не хочется ломать голову над шарадами. Попробуй решить сначала на псевдокоде (русским по белому объясни тупой машине, что ты хочешь сделать).
Когда сам поймёшь, код получится без напряга, простой и понятный
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.12.2009, 11:53     маленькая прожка с ошибкой #5
C
1
char s, al[100];
в al всего сто элементов, последний должен быть зарезервирован под нуль-символ
по нуль-символу определяется где конец строки

а здесь случай, видимо, в циклах
Том Ардер
Модератор
Эксперт по математике/физике
3701 / 2314 / 286
Регистрация: 15.06.2009
Сообщений: 4,092
14.12.2009, 02:01     маленькая прожка с ошибкой #6
Цитата Сообщение от Credo Посмотреть сообщение
char s,al[100]
Цитата Сообщение от Credo Посмотреть сообщение
i=100; printf("_%c",al[i]);
Переформулирую вопрос:
Что такое al[i] при i=100 ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2009, 02:13     маленькая прожка с ошибкой
Еще ссылки по теме:

C++ Маленькая мантисса long double
C++ маленькая маленькая консультация, не сложная работа
C++ Маленькая доработка программы
Маленькая ошибка C++
Маленькая конструкции с if else C++

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

Или воспользуйтесь поиском по форуму:
perchik71
69 / 27 / 2
Регистрация: 08.08.2009
Сообщений: 60
14.12.2009, 02:13     маленькая прожка с ошибкой #7
Цитата Сообщение от Credo Посмотреть сообщение
компиляция проходит успешно, после запуска выдает ошибку (см вложение)
прога открывает файл, посимвольно его читает. если символ есть в массиве al, в st счетчик увеличивается, если нет - добавляет символ и тож увеличивает счетчик.
Код
 FILE *big; char s, al[55]; int t, j, n, st[55];
 big=fopen("big.txt","r");
     for(int i=0;i<55;i++) st[i]=0;
     j=0; n=0;
     while(!feof(big))
     {
       s=getc(big);
       for (int i=0;i<55;i++) if(al[i]==s){st[i]++; j++; n++; i=55;}
       if (n==0) {al[j]=s; st[j]++;} //здесь ошибка
       n=0;j++;
      }
  fclose(big);
напишу так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>
#include <fstream.h>
#include <cstring.h>
#include <iostream.h>
 
string str;  //текст файла
unsigned ch;
 
void main()
{
ifstream ifs("big.txt");
while(!ifs.eof()) str=(char)ifs.get();
ifs.close();
cout<<"Длинна файла: " cout<<str.length();
}
После чего делай чё хош с str ))))
Длинна текста те известно ...
Yandex
Объявления
14.12.2009, 02:13     маленькая прожка с ошибкой
Ответ Создать тему
Опции темы

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