Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 27.08.2009
Сообщений: 5
1

Обращение к массиву вызывает ошибку

27.08.2009, 22:12. Показов 974. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код-
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char alfa[29];
int a,b,c;
FILE *fp;
int main()
{
a=1;
b=1;
c=1;
alfa[1]='a';
alfa[2]='b';
alfa[3]='c';
alfa[4]='d';
alfa[5]='e';
alfa[6]='f';
alfa[7]='g';
alfa[8]='h';
alfa[9]='i';
alfa[10]='j';
alfa[11]='k';
alfa[12]='l';
alfa[13]='m';
alfa[14]='n';
alfa[15]='o';
alfa[16]='p';
alfa[17]='q';
alfa[18]='r';
alfa[19]='s';
alfa[20]='t';
alfa[24]='u';
alfa[25]='v';
alfa[26]='w';
alfa[27]='x';
alfa[28]='y';
alfa[29]='z';
fp=fopen("dictionary.txt","r");
 
 start1:
 fprintf(fp,"%s\n",alfa[a]);
 if(a!=29)
 {a++;
 goto start1;}
  start2:
  fprintf(fp,"%s %s\n",alfa[a], alfa[b]);
  if(a!=29)
  {if(b!=29)
  {b++;
  goto start2;}
  if(b==29)
  a++;
  goto start2;
  }
 
fclose(fp);
return 0;
}
Он нормально билдится и компилируется. Однако если попытаться запустить программу - вылетает. Почему? Помогите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2009, 22:12
Ответы с готовыми решениями:

Обращение у массиву указателей
Привет! Появились затруднения с обращением к массиву указателей на ЧИСЛО Например, int *arr;...

Обратный слеш посреди кода не вызывает ошибку
Всем доброго времени суток! Объясните, что это значит, и почему это компилируется и работает без...

Поиск по массиву структур (выдает ошибку)
Задача. Есть программа спектаклей на 25-27 апреля, я должен ввести любую из дат и увидеть время,...

Обращение к DLL вызывает ошибку
Есть библиотека, при обращении к ней из консольного приложения: #include &lt;iostream&gt; using...

8
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
27.08.2009, 22:16 2
Цитата Сообщение от AlBrut Посмотреть сообщение
Он нормально билдится и компилируется. Однако если попытаться запустить программу - вылетает. Почему?
Видать диспетчер набилдирялся. Откройте мухобойку, и посмотрите координаты вылета.
0
0 / 0 / 0
Регистрация: 27.08.2009
Сообщений: 5
27.08.2009, 22:20  [ТС] 3
Координата вылета - { , которая идет сразу после int main(). Как это понимать?
0
43 / 39 / 12
Регистрация: 05.01.2009
Сообщений: 394
27.08.2009, 22:26 4
C++
1
2
  alfa[29]='z';  - ненадежное обращение, элементы массива здесь от 0 до 28
может fp =0; если файл не открыт
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
27.08.2009, 22:31 5
Читайте про индексацию массивов, в C индексы идут от нуля.
1
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
27.08.2009, 22:49 6
Код
alfa[20]='t';
alfa[24]='u';
С 20 сразу на 24? Чтобы не гемороиться с заполнением, можно делать так
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#define N 26
main()
{
    int i;
    char alpha[N];
    for(i = 0; i < N; i++) {
        alpha[i] = 'a' + i;
        printf("%c\n", alpha[i]);
    }
}
0
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
27.08.2009, 23:14 7
AlBrut, какой то сложноатый код...
а что если не будет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if(a!=29)
 {a++;
 goto start1;}
  start2:
  fprintf(fp,"%s %s\n",alfa[a], alfa[b]);
  if(a!=29)
  {if(b!=29)
  {b++;
  goto start2;}
  if(b==29)
  a++;
  goto start2;
  }
то есть для чего тебе это??...
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
28.08.2009, 09:38 8
Для того что бы Ваша программа работала нормально необходимо:
1. Наличие в рабочей папке файла "dictionary.txt"
2. В 4-ой строке заменить "char alfa[29];" на "char alfa[30];"
3. Строку № 38 переписать так: fp=fopen("dictionary.txt","at");
4. В строках №№ 41, 46 в функциях fprintf() заменить все "%s" на "%c"
2
Заблокирован
Автор FAQ
28.08.2009, 11:07 9
В коде сразу несколько ошибок
1 - В массиве индекс 1-го элемента не 1 как у тебя, а 0!
Притом букв у тебя 26 а не 29...
2 - Если ты в файл пишешь то нужно с параметром "w"
или даже "wb+" использовать, у тебя "r" - неправильно!
3 - fprintf ты в файл чары закидуешь не строки,
нужно форматирование "%с" использовать...
4 - Операции безусловного перехода типа goto предпочтительно
не использовать, у тебя куча боле простых конструкций,
например используй цикл с параметром - while()
Вот сам код, я его немножко подправил, думаю єто то что ты хотел
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int a,b;
char alfa[26];
 
FILE *fp;
int main()
{
    a=0;
    b=0;
 
    alfa[0]='a';
    alfa[1]='b';
    alfa[2]='c';
    alfa[3]='d';
    alfa[4]='e';
    alfa[5]='f';
    alfa[6]='g';
    alfa[7]='h';
    alfa[8]='i';
    alfa[9]='j';
    alfa[10]='k';
    alfa[11]='l';
    alfa[12]='m';
    alfa[13]='n';
    alfa[14]='o';
    alfa[15]='p';
    alfa[16]='q';
    alfa[17]='r';
    alfa[18]='s';
    alfa[19]='t';
    alfa[20]='u';
    alfa[21]='v';
    alfa[22]='w';
    alfa[23]='x';
    alfa[24]='y';
    alfa[25]='z';
    if((fp=fopen("dictionary.txt","wb+")))
    {
 
        while(a!=25)
        {
            fprintf(fp,"%c\r\n",alfa[a]);
            a++;
        }
        a = 0;
        while(a!=25)
        {
            fprintf(fp,"%c %c\r\n",alfa[a], alfa[b]);
            if(b < 25)
                b++;
            else
            {
                b = 0;
                a++;
            }
        }
        fclose(fp);
    }
    else
        printf("Error while open dictitionary.txt\r\n");
    return 0;
}
0
28.08.2009, 11:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2009, 11:07
Помогаю со студенческими работами здесь

Обращение к Label по индексу вызывает ошибку
Первое условие выполняется нормально - если в Combobox1 выбрана запись содержащая первую букву &quot;С&quot;...

Обращение к TextBox до создания формы вызывает ошибку
Есть переменная которая используется в нескольких формах, поэтому объявляю ее так : Friend a As...

Обращение к pictureBox1.Image до инициализации компонентов вызывает ошибку
Добрый, вечер! Хотел написать программку, чтобы я открывал файл и по нажатию кнопки она...

Из ISS aspx-странички открываются, но обращение к БД вызывает ошибку
Здравствуйте. Мне очень нужна помощь. Пытаюсь развернуть веб-приложение (сейчас хотя бы на своем...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru