Ошибка в конструкции 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 шт):
Использование 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);
. Это будет работать всегда.