Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Выдает сообщение об ошибке при выполнении программы на Си / 6 сообщений из 6, страница 1 из 1
17.01.2013, 14:08
    #38113941
apelcine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдает сообщение об ошибке при выполнении программы на Си
Всем добрый день!
Помогите разобраться с проблемой пожалуйста.
Пишу программу на С.
Условие: Вывести значения трех наибольших элементов среди C1,C2,...,Cm.
Задача несложная, да и код может быть кривоват, но всё же. Компилирую в CodeBlocks, без ошибок. Начинаю выполнение - после того как введу 2-3 значения - вылетает("Прекращена работа программы").
Вот код:

Код: plaintext
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.
#include <stdlib.h>
#include <stdio.h>

int main ()
{
    int *mas, n, i, a, b, c;
    printf("Vvedite kolichestvo elementov massiva: ");
    scanf("%d", &n);
    mas = malloc(n*sizeof(int));
    printf("Vvedite elementy massiva: \n");
    for(i=0; i<n; i++)
    {
       printf("[ %d ] =",i);
       scanf("%d",mas[i]);
    }
    printf("Ishodnyi massiv:\n");
    for(i=0; i<n; i++)
       {
           printf("%d",mas[i]);
           //std::cout<<mas[i]<<" ";
       }
    a=mas[0];
    b=mas[1];
    c=mas[2];
    for(i=3; i<n; i++)
        if(mas[i]>=a || mas[i]>=b || mas[i]>=c)
        {
            if(a<=b && a<=c)
                a=mas[i];
            else
                if(b<=c)
                    b=mas[i];
                else
                    c=mas[i];
        }
        printf("Tri naibolshih chisla: %d\n%d\n%d\n",a,b,c);
        //std::cout<<"Tri naibolshih chisla: "<<a<<"  "<<b<<"  "<<c;
        free(mas);
        return 0;
}
...
Рейтинг: 0 / 0
17.01.2013, 14:24
    #38113983
pirovindos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдает сообщение об ошибке при выполнении программы на Си
apelcine,

Например
Код: plaintext
1.
scanf("%d",mas[i]); 

заменить на
Код: plaintext
1.
scanf("%d",mas+i);
...
Рейтинг: 0 / 0
17.01.2013, 14:29
    #38113993
apelcine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдает сообщение об ошибке при выполнении программы на Си
pirovindos,

Отлично, помогло!)
А не подскажете зачем изменять и почему помогло?
...
Рейтинг: 0 / 0
17.01.2013, 14:31
    #38114000
pirovindos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдает сообщение об ошибке при выполнении программы на Си
apelcine,

Аргумент функции scanf - указатель. Почитайте, что такое "указатели" в языке C (или С++, все равно).
...
Рейтинг: 0 / 0
17.01.2013, 14:34
    #38114010
apelcine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдает сообщение об ошибке при выполнении программы на Си
pirovindos,

моя недоработка.
Точно, везде указатель, а тут использовал просто массив.

буду лучше учиться;)

Спасибо!
...
Рейтинг: 0 / 0
17.01.2013, 19:14
    #38114485
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдает сообщение об ошибке при выполнении программы на Си
apelcinepirovindos,

Отлично, помогло!)
А не подскажете зачем изменять и почему помогло?

mas[i] -- это значение i-ого элемента массива.

mas+i -- это адрес i-го элемента массива

mas[i] эквивалентно *(mas+i)

scanf требует для ввода переменной её АДРЕС, а НЕ ЕЁ ЗНАЧЕНИЕ.
Поэтому и ошибка.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Выдает сообщение об ошибке при выполнении программы на Си / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]