Ошибка в конструкции if/else if

Не получается вот такая простая проверка, не выводит содержимое внутри конструкции:

char answer[100];

printf("\nEnter option and press enter: \n");
fgets(answer, sizeof(answer), stdin);
answer[strcspn(answer, "\n")] = 0;

if (answer[100] == '1')
{

    const char* data = "Это список 1";

    printf(data);

}

else if (answer[100] == '2')
{

    const char* data = "Это список 2";

    printf(data);

}

Суть проста — пользователь вводит, к примеру, 1 и если это так, отдаём первое значение data; при вводе 2 — соответственно 2-е.


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Использование answer[100] - ошибка, обращение к элементу за концом массива. Можно было бы записать условие как answer[0] == '1', что означает "первый символ - цифра один". Но это плохо, если в меню будет хотя бы десять пунктов. Попробуйте так:

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

int main() {
    char answer[100];

    printf("\nEnter option and press enter: ");
    fgets(answer, sizeof(answer), stdin);

    if (strcmp(answer, "1\n") == 0) {
        puts("Это список 1");
    } else if (strcmp(answer, "2\n") == 0) {
        puts("Это список 2");
    }
}
$ gcc temp.c

$ ./a.out

Enter option and press enter: 1
Это список 1

$ ./a.out

Enter option and press enter: 2
Это список 2

$ ./a.out

Enter option and press enter: 3

$

P.S. printf(data); - не делайте так. Это работает пока в data не попадёт символ процента. А как попадёт, начнутся ошибки и неопределённое поведение. Если вы хотите именно printf, то printf("%s", data);. Это будет работать всегда.

→ Ссылка