Я пытаюсь заставить консольное приложение C собирать (через клавиатуру) специальные испанские символы, такие как акценты, «ñ» и т. д., в a scanf
или в gets
.
Мне удалось правильно отобразить эти символы (хранящиеся в переменной или напрямую из printf
) благодаря расширению locale.h
. Я показываю пример:
#include <stdio.h>
// Añade paquete de idiomas
#include <locale.h>
int main(void)
{
// Declaración de variables
char cadena[254];
// Establecer el idioma a español
setlocale(LC_ALL, "spanish");
// Mostrar correctamente los caracteres especiales del español
printf("¡Éxito!. Se muestran los caracteres especiales del español.");
printf("Introduce un string con caracteres especiales: ");
gets(cadena);
printf("El string con caracteres especiales que has introducido es: %s", cadena);
return 0;
}
но я все еще не мог заставить их правильно подобрать функции, упомянутые выше.
кто нибудь знает как это сделать?
Спасибо
РЕДАКТИРОВАТЬ 1:
Делая тесты, я заметил, что:
setlocale(LC_ALL, "spanish");
Он правильно показывает испанские символы, но не берет их с клавиатуры.setlocale(LC_ALL, "es_ES");
Он правильно собирает испанские символы с клавиатуры, но не отображает их правильно.
Я нашел решение проблемы. По-видимому, эта проблема возникает только в Windows и ее командной консоли.
Он заключается в изменении кодировки как ввода, так и вывода консоли windows с помощью команд
SetConsoleCP()
иSetConsoleOutputCP()
(для этого также необходимо включить заголовокwindows.h
). С этим проблема решена. Я надеюсь, что это поможет другим людям, которые имеют ту же проблему, что и я.Всего наилучшего.