C: поиск конкретного символа в строке - PullRequest
0 голосов
/ 06 ноября 2019

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

int where (char *str, char ltr);

int main () {
    char word [80];
    char letter;
    printf("Type in a word: ");
    scanf("%s", word);
    printf("Type in a character: ");
    scanf("%s", letter);
    printf("%d", where(word, letter));
}

int where (char *str, char ltr){
    int i = 0;
    while(i < strlen(str)){
        if(ltr == str[i]){
            break;
        }
        i++;
    }
    return i;
}

1 Ответ

1 голос
/ 06 ноября 2019

Проблема в том, что здесь

scanf("%s", letter);

Неопределенное поведение, потому что оно ожидает указатель на символ, но вы даете ему символ. Спецификатор %s предназначен для чтения строк, а не отдельных символов. Ваш компилятор должен предупредить вас о несоответствии типов здесь.

Вместо этого измените его на следующее:

scanf(" %c", &letter);

%c для чтения в одиночных символах и с пробелом в начале, который вы делаетеон игнорирует все начальные пробелы во вводе (например, новую строку, введенную после вашего слова).

Вам также следует изменить scanf("%s", word); на scanf("%79s", word);, чтобы избежать неопределенного поведения, когда пользователь вводит очень длинное слово(это ограничивает длину слова размером вашего буфера).

...