C - функция strcspn () пропускает более длинные строки в моем массиве - PullRequest
0 голосов
/ 12 декабря 2018

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

int main(){
char *deck[5] = {"1c", "4h", "7s", "10d"};
char *input[10];
scanf(" %c", &input);
    for (int x = 0; x < 53;){
        int check = strcspn(deck[x], input);
        if (check == 0){
            printf("%d", x);
            break;
        }
        else{
            x++;
            printf("why\n");
        }
    }
}

Это работает для первых трех (1c, 4h, 7s) ивозвращает 0, 1 и 2 соответственно, но когда я набираю 10d, функция просто возвращает 0 - даже не печатая «почему».

Почему цикл возвращает 0 и как я могу это исправить?

1 Ответ

0 голосов
/ 12 декабря 2018

strcspn проверяет, начинается ли первая строка любым набором символов из второй строки.Когда вы набираете 10d, он возвращает 0, потому что первая строка "1c" начинается с '1', то есть символа, который вы читаете с scanf.Возможно, вам следует использовать strcmp или strncmp вместо strspn.

В вашем коде есть еще несколько проблем:

char *input[10]; - это массив из 10 указателей (char*).Вы, вероятно, имеете в виду массив символов (строку), например char input[10];.

Формат %c сканирует только один символ, а не всю введенную строку.Может быть, fgets с последующим удалением символов '\n' и \r' достаточно для чтения вашего ввода.

Цикл for может выходить за пределы конца массива.x < 53 должно быть x < 4.

При включенных предупреждениях компилятор, вероятно, предупредит вас о некоторых проблемах в вашем коде.Общие рекомендации: Включите предупреждения компилятора и исправьте их.Прочитайте документацию по функциям, которые вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...