powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Выдает сообщение об ошибке при выполнении программы на Си
6 сообщений из 6, страница 1 из 1
Выдает сообщение об ошибке при выполнении программы на Си
    #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
Выдает сообщение об ошибке при выполнении программы на Си
    #38113983
pirovindos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apelcine,

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

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

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

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

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

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

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

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

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

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

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

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


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