ошибка преобразования char в int в c

Я даю 1000-значное число в качестве входных данных и использую эту программу, чтобы найти максимальное произведение 5 последовательных целых чисел. Массив a используется для хранения последовательности с наивысшим продуктом. Я получаю неожиданный ответ (я подозреваю, что проблема заключается в преобразовании из char в int)

#include <stdio.h>
int main(void) 
    {
    int a[5],c=0,b,i=1;
    char *num[1000];
    scanf("%s",&num);
    while(i<5)
    {
        a[i]=num[i]-'0';
        i++;
    }
    while(i<1000)
    {
        b=(char)num[i]-'0';
        if(a[c]<b)
        {
            a[c]=b;
            c=(c+1)%5;
        }i++;
    }
    printf("%d",a[0]*a[1]*a[2]*a[3]*a[4]);
    return 0;
}

person Nitin Labhishetty    schedule 21.01.2014    source источник
comment
Помимо исправления типа, если вы хотите сохранить 1000 символов, вам нужно выделить дополнительную память для завершающего нуля в конце, поэтому сделайте num не менее 1001.   -  person woolstar    schedule 21.01.2014


Ответы (1)


Ваш код для выделения и чтения строки неверен. Вы выделяете массив из 1000 указателей. Вы хотели написать:

char num[1000];
scanf("%s", num);

Остальная часть вашего кода тоже полна ошибок. Вы хотели инициализировать i значением 0. И вам нужно установить его обратно на 0 перед вторым циклом. И ваш второй цикл работает до 1000 и, таким образом, обращается к неинициализированным элементам num.

person David Heffernan    schedule 21.01.2014
comment
Спасибо за исправление, я намеревался сохранить значение i равным 5 перед вторым циклом. - person Nitin Labhishetty; 21.01.2014
comment
Уверяю вас, это не так. Второй цикл считывает неинициализированные значения. - person David Heffernan; 21.01.2014
comment
Это больше, чем это. Вы читаете из num[i] неинициализированные элементы - person David Heffernan; 21.01.2014