У меня есть следующий код для печати некоторых строк на консоли в формате, выровненном по левому краю:
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
int main()
{
printf("%s:\n", "Türkçe karakterler ile");
printf("%-14s: \n", "Onaltılık");
printf("%-14s: \n", "Onluk");
printf("%-14s: \n", "İkilik");
printf("\n%s:\n", "Türkçe karakterler olmadan");
printf("%-14s: \n", "Onaltilik");
printf("%-14s: \n", "Onluk");
printf("%-14s: \n", "Ikilik");
}
Я скомпилировал этот код с gcc (7.3.0) и clang (6.0.0) насистема Ubuntu 18.04.
Вывод выглядит следующим образом:
Türkçe karakterler ile:
Onaltılık :
Onluk :
İkilik :
Türkçe karakterler olmadan:
Onaltilik :
Onluk :
Ikilik :
Как видно из кода в первой группе строк, есть некоторые турецкие символы, такие как 'ı' и'Я'.Во второй группе строк нет турецких символов.
Вывод функции printf неправильно выровнен для строк, содержащих турецкие символы.Ожидаемый вывод:
Türkçe karakterler ile:
Onaltılık :
Onluk :
İkilik :
Türkçe karakterler olmadan:
Onaltilik :
Onluk :
Ikilik :
Если я скомпилирую тот же код в системе Windows (Windows 7) с помощью gcc (MinGW v5.1.1 внутри CodeBlocks 17.2), вывод будет правильным, как показано ниже:
Türkçe karakterler ile:
Onaltılık :
Onluk :
İkilik :
Türkçe karakterler olmadan:
Onaltilik :
Onluk :
Ikilik :
Может кто-нибудь помочь мне разобраться в чем проблема?