How many 1s can you find in:
Q: Ввод русских символов в C Учу чистый C по книге из серии Head First. Там был пример, что когда ты вводишь (на латинице) карту - тебе выводится ее ценность. Я решил переписать код и при вводе латинских символов все выводилось хорошо, но потом изменив код под проверку русских символов- код работал, но не корректно. 
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
setlocale(LC_ALL, Rus);
char card_name[3];
puts(Введите название карты: );
scanf(%2s, card_name);
int val = 0;
if (card_name[0] == Т)
{
    val = 11;
} else if (card_name[0] == К)
{
    val = 10;
} else if (card_name[0] == Д)
{
    val = 10;
} else 
{
    val = atoi(card_name);
}
printf(Ценность вашей карты: %i\n, val);
return 0;
}

Вывод: 
Введите название карты: 
Д    
Ценность вашей карты: 0

Что делать? Или же C понимает только латиницу?
UPD: ос- Ubuntu 18.04, компилятор- gcc

A: Так как кодировка utf-8, то русские буквы ( одна буква ) занимают два байта, а английские как всегда один байт. В этом случае можно использовать функцию проверки строки вот так.
if ( strncmp ( card_name, Д, 2 ) == 0 ) {
  val = 10;
}

Но можно перед strncmp поставить символ восклицательный знак, что означает равенство на ноль и будет аналогично приведённому коду.
if ( !strncmp ( card_name, Д, 2 ) ) {
  val = 10;
}


user
The text includes seven "1"s in total.
assistant