2015-02-12 6 views
-4

Это пакетная программа почти правильно, но я не понимаю, почему она не работает?Почему эта программа pangram не работает?

int main() { 

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
    char *a=malloc(256); 
    int first[26]={0},c=0,i=0,flag=0; 
    //printf("Enter string"); 
    fgets (a, MAX_NAME_SZ, stdin); 
    while(a[c]!='\0') 
    { 
     first[a[c]-'a']++; 
     c++; 
    } 

    for(i=0;i<26;i++) 
    { 
     if(first[i]==0) 
     { 
      flag=1; 
      break; 
     } 
    } 

    if(flag==0) 
    { 
     printf("panagram"); 
    } 
    else 
    { 
     printf("not panagram"); 
    } 

    return 0; 
} 
+4

Что это * не работает? * Означает? Вы получаете какие-либо ошибки? – Rizier123

+0

Укажите, с какими проблемами вы столкнулись, или отправьте сообщение об ошибке вместе с вашим вопросом. –

+0

Добро пожаловать в Stack Overflow! Пройдите [тур] (http://stackoverflow.com/tour) и прочитайте [Как спросить] (http://stackoverflow.com/help/how-to-ask), чтобы узнать, чего мы ожидаем от вопросов. –

ответ

0

В вашем коде есть логическая ошибка, потому что вы не проводили проверку ввода и/или проверку работоспособности на входе пользователя.

В коде

first[a[c]-'a']++; 

пытается получить доступ недопустимой ячейки памяти в first массиве, если a[c] не в диапазоне [a, z].

Даже для пользовательского ввода UPPER буквы или пространства [] (что все, логически следует считать действительным вход), вы программируете expericence undefined behaviour по экранным вне связанной памяти.

Чтобы избежать этого, выполните проверку на значение a[c], прежде чем напрямую использовать это как индекс массива first.

Смежные вопросы