Я читаю пользовательский ввод с помощью fgets () и проверяю, есть ли какие-то недопустимые символы.
Если пользователь введет, например, «š», я это заметю, потому что значение «š» выше, чем 127. Но когда пользователь вводит «ασδφ» или «жщдф», мой код не будет работать, потому что эти символы полностью игнорируются и заменяются на "?".
Мой код:
char input[100];
fgets(input, 100, stdin);
for (int i = 0; i < strlen(input) - 1; i++)
{
/// Check, if input[i] is ASCII symbol
}
Когда пользователь вводит «š», в переменной ввода будет «š». Но когда пользователь вводит "щ", ввод переменной int будет "?" и вопросительный знак является действительным символом ASCII.
Как это исправить?
EDIT:
Операционная система: Windows 10
IDE: Visual Studio 2015
Код:
for (size_t i = 0; i < strlen(input); i++)
{
printf("%c %d\n", input[i], input[i]);
if (input[i] < 0/* || input[i] > 127*/)
{
error = 4;
break;
}
}
Если я приостанавливаю программу, содержимое массива для пользовательского ввода "ασδφ" составляет 63, 63, 63, 63, 10.
РЕДАКТИРОВАТЬ 2:
Теперь я в полном замешательстве. Я попытался скомпилировать и запустить на Ubuntu, все работало нормально. Но в Windows он все еще заменяет не ASII символы на знаки вопроса. Любая идея, как заставить это работать на Windows?