2014-11-10 3 views
0

Программа должна использовать функцию hydroxide для проверки введенной строки, чтобы увидеть, заканчивается ли она «oh» (или «ho») и возвращает значение 1, если это произойдет. Вот что я написал, и когда я запускаю программу, он просто зависает. Я все еще новичок, поэтому заранее извиняюсь, если это глупый вопрос.Функция для проверки строки зависает

#include <stdio.h> 
#include <string.h> 

#define MAX_LEN 10 

int hydroxide(char *compound); 

int main(void) 
{ 
    char compound[MAX_LEN]; 
    int i, num; 

    printf("Enter compound> \n"); 
    scanf("%s", compound); 

    for (i = 0; i < strlen(compound); ++i) { 
    if (islower(compound[i])) 
     compound[i] = toupper(compound[i]); 
    } 

    num = hydroxide(compound); 

    printf("%d", num); 

    return(0); 
} 

int hydroxide(char *compound) 
{ 
    char *end[4], *temp; 
    int last, status; 

    last = strlen(compound); 

    strcpy(end[], &compound[last - 2]); 

    if (strcmp(end[last - 2],end[last - 1]) > 0) { 
    temp = end[last - 2]; 
    end[last - 2] = end[last - 1]; 
    end[last - 1] = temp; 
    } 

    if (*end[last - 2] == 'H') { 
    if (*end[last - 1] == 'O') 
     status = 1; 
    } 

    return(status); 
} 

ответ

0
char end[4], *temp; /* Change to end[4] */ 
... 
... 
strcpy(end, &compound[last - 2]); /* Change to end */ 
... 
... 
/* Commented 
* if (end[0],end[1]) > 0) { 
* temp = end[last - 2]; 
* end[last - 2] = end[last - 1]; 
* end[last - 1] = temp; 
* } 
*/ 
/* Condition updated */ 
if ((end[0] == 'H' && end[1] == 'O') || (end[0] == 'O' && end[1] == 'H')) { 
    status = 1; 
} 

Live Example here

+0

Всякий раз, когда я изменить тот я получаю 2 предупреждения для линии: «если (STRCMP (конец [последний - 2], конец [последний - 1])> 0) {', и оба они говорят: «[Warning] передающий аргумент 1« strcmp »делает указатель от целого без cast [включен по умолчанию]», а также говорит «[Note] expected« const char * », но аргумент имеет тип' символ '». –

+0

Вы прокомментировали требуемый сегмент? –

+0

Благодарим за редактирование. Это устранило проблему! –

0

Попробуйте эту функцию. Here the last two characters in the string are checked for 'H' or 'O'. Если символы найдены, то будет возвращать 1.

int hydroxide(char *compound) 
{ 
    int len, status = 0; 

    len = strlen(compound); 

    if ((compound[len - 2] == 'H' && compound[len - 1] == 'O') || 
      (compound[len - 1] == 'H' && compound[len - 2] == 'O')) { 
      status = 1; 
    } 

    return status ; 
}