Как вставить значения int в матрицу, используя оператор if с условным обозначением char? - PullRequest
1 голос
/ 11 июля 2019

Я изучаю C, и у меня возникают проблемы с ситуацией, когда мне нужно поместить значения в матрицу, основанную на вводе символов пользователя, вот код:

#include <stdlib.h>
#include <stdio.h>

int main() {

    int mat[2][2] = { NULL };
    char sex;

    printf("Insert gender (m or f):");
    scanf_s("%c", &sex);
    if (&sex == "m") {
        mat[0][0] = 1;
        }
    if (&sex == "f") {
        mat[0][0] = 2;
    }
    else{
        mat[0][0] = 3;
        printf("invalid\n");
    }
    printf("inserted: %c \n", sex);

    printf("value on matrix 00: %i\t", mat[0][0]);
    //printf("%i\n", mat[0][1]);
    //printf("%i\t", mat[1][0]);
    //printf("%i", mat[1][1]);

    return 0;
}

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

Ответы [ 2 ]

1 голос
/ 11 июля 2019

В C оператор == нельзя применять к строкам для их сравнения (для этого вы можете использовать функцию strcmp из string.h ). В любом случае, вам нужно не сравнивать строки, а сравнивать символы. (И то, что вы делаете, это сравниваете адрес со строкой.) Я предлагаю: отсканировать символ вместо строки (используя scanf вместо scanf_s ) и изменить равенство тесты от (& var == "val") до (var == 'val') . Также некоторые советы в коде ниже:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    // name your variables properly
    // initialize them immediately to avoid undefined values
    // respect your variables types: use '\0' instead of 0 for chars and 0 instead of NULL for integers

    char gender = '\0';
    int matrix[2][2] = {{0}};

    // display accurate messages to the user

    printf("Select a gender (m or f): ");

    // don't scan a string if you only need a char
    // always check the return of a scan (reason in this answer's comments)

    if(scanf("%c", &gender) <= 0)
    {
         printf("Input error\n");
         return 0;
    }

    // switch is usually more efficient then else-ifs

    switch(gender)
    {
        case 'm':
            matrix[0][0] = 1;
            break;

        case 'f':
            matrix[0][0] = 2;
            break;

        default:
            matrix[0][0] = 3;
            printf("Invalid gender\n");
            break;
    }

    printf("Selected gender: %c\n", gender);
    printf("Value on matrix[0][0]: %i\n", matrix[0][0]);

    return 0;
}
0 голосов
/ 11 июля 2019

&sex == "m" сравнивает адрес sex с адресом строкового литерала "m", который предположительно оценивается как ложный. Это не то, что вы хотите.

Вы должны сравнить значение sex с символом литерал 'm', например:

if (&sex == "m") {
    // ...
}

То же самое относится к &sex == "f", который должен быть sex == 'f'.

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