2015-04-03 2 views
-7
int main() 
{ 
    int num,k,p,w; 
    char parts[30]; 
    char power[30]; 
    scanf("%s",parts); 
    int count=strlen(parts); 
    for(w=0;w<count;w++){ 
      if(parts[w]=='^') 
       num=w; 
     } 
     if(isdigit(num)) { 
     for(k=num+1 ; k<count ;k++) 
      strcat(power,parts[k]); 
     } 
     else{ 
     strcpy(power,'1'); 
     } 

     p=atoi(power); 
     printf(" the power is : %d\n",p); 
} 

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

+0

пример ввода: 5x^4 –

+0

Что такое цель? :/ – Mukit09

+1

Переменная 'w' является * индексом * в массиве' parts'. Выполнение 'num = w' присваивает этому * index * переменной' num' не фактическую цифру в строке. –

ответ

0

Проблемы:

  1. Если пользователь вводит что-то, что не содержит '^', то ваш код показывает, как Undefined Behavior Num не инициализирован здесь

    if(isdigit(num)) 
    

    Если на входе отсутствует содержит '^', то if будет истинным.

  2. Здесь:

    strcat(power,parts[k]); 
    

    strcat находит NUL-терминатор в качестве первого аргумента и записывает свой второй аргумент из этой позиции. Но power не инициализирован! Таким образом, это также вызывает Undefined Behavior. Кроме того, parts[k] является char, но strcat ожидает, что оба его аргумента будут иметь NUL-конец и быть типа const char*.
    ИНИЦИАЛИЗИРУЙТЕ `мощности с помощью

    char power[30]={0}; 
    

    и изменить strcat к

    strcat(power,&parts[k]); 
    
  3. Та же проблема, как и здесь:

    strcpy(power,'1'); 
    

    изменить его на

    strcpy(power,"1"); 
    

    , чтобы исправить это. Двойные кавычки делают строковый литерал типа const char*, который \0 завершается

  4. Здесь:

    scanf("%s",parts); 
    

    Пользователь может ввести некоторые строки более 29 символов (+1 для \0 терминатора). Это также вызовет Undefined Behavior. Это исправить, ограничивая количество символов, которые будут проверяться с помощью

    scanf("%29s",parts); 
    

    scanf будет сканировать максимум 29 знаков (+1 для \0 терминатора) из стандартного входного потока, когда это будет сделано.

+0

он работал просто отлично ... и я скорректировал

+0

uummmm ... что-то пойдет не так, когда власть имеет более одной цифры –

+0

@EliasKhoury, вы все упоминали в моем ответе? BTW, примите ответ, если это поможет, нажав зеленую галочку (отметку) рядом с ними. , вы, а также ответчик может заработать репутацию. –

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