Почему я получаю сообщение ошибки Segmentation fault (core dumped)?

У меня есть следующее упражнение:

Напиши программу, названную Средним показателем, который читал бы неопределенное число целых чисел из-за командной строки и вычислял средний показатель. Например:./Media 3 5 1 2

Средний показатель: 2.75

В случае обнаруживания, что пользователь не ввел число, покажите ошибку на экране и закончитесь.

Я написал решение для этого, но выполнив это, он дает мне сообщение ошибки Segmentation fault (core dumped) и я не знаю, каков мотив.

Я использую этот код:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main (int argc, char *argv[])
{
    double media = 0;
    int es_digito;
    int aux;
    es_digito = isdigit(argv[1]);
    for (int i = 1; i < argc && es_digito != 0; ++i) {
        aux = atoi(argv[i]);
        media += aux;
    }
    if (es_digito == 0) {
        printf("Hubo error. Solo valen numeros\n");
    } else {
        media = media/(argc-1);
        printf("La media es: %lf\n",media);
    }
}
3
задан 22.03.2016, 17:37
1 ответ
es_digito = isdigit(argv[1]);

У этой линии есть две проблемы:

Спрашивать прямо об аргументе 2, не зная, существует ли он рискнули и может способствовать тому, чтобы твоя программа не удалась. Это ты был бы должен контролировать это.

Вторая ошибка - что argv это двойной указатель (char *argv[]), потом argv[i] это указатель типа char. Если ты хочешь подтвердить символ, ты должен добавлять звездочку к коду: es_digito = isdigit(*argv[1]);

С другой стороны, если ты обратишь внимание, ты увидишь, что в es_digito только ему распределяется стоимость однажды, потом ты не подтверждаешь, числовой ли каждый параметр. Только ты подтверждаешь первого и твой код понимает, что оставшаяся часть они будут действительными, потому что да.

3
ответ дан 24.11.2019, 14:42