2015-10-03 2 views
1

Когда я ввожу a, выход not a. Условие верно, поэтому почему вывод not a?. Когда я использую getchar вместо scanf_s, он отлично работает. В чем проблема ?Почему функция scanf_s неправильно принимает вход?

char op; 
scanf_s("%c", &op); 
if (op == 'a') { 

printf("the character is a"); 

} 
else { 
printf("not a"); 
} 
+0

Какой у вас компилятор? –

+0

Я этого не знаю. Просто запустите его на Visual Studio 2013 –

+2

попробуйте 'scanf_s («% c », & op, 1);' – BLUEPIXY

ответ

2

Попробуйте scanf() вместо scanf_s().

+0

VS будет использовать предупреждение (возможно, ошибку) при использовании 'scanf()'. Это раздражает. –

+0

@Cool Guy http://stackoverflow.com/a/23487039/2410359 для тихого предупреждения – chux

2

спецификатора %c (еще два таких исключения %s, %[) требует 3-й аргумент Размер-

scanf_s("%c", &op, 1); // 1 to read single character 
0

Третий аргумент должен быть sizeof типа. scanf_s гарантируется только в том случае, если __STDC_LIB_EXT1__ определяется реализацией, и если пользователь определяет __STDC_WANT_LIB_EXT1__ целочисленной константе 1, прежде чем включать <stdio.h>.

#define __STDC_WANT_LIB_EXT1__ 1 
#include <stdio.h> 

int main() 
{ 
char op; 
scanf_s("%c", &op, sizeof(op)); 
if (op == 'a') 
    printf("the character is a"); 
else 
    printf("not a"); 
    return 0; 
} 
Смежные вопросы