История изменений
Исправление fsb4000, (текущая версия) :
Поскольку твой Linux скорее всего Windows судя по этому треду или ты wine-gcc собираешь, но тогда разницы не много с Windows, то попробуй так:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
setlocale(LC_ALL, ".866"); // or, at least, LC_CTYPE
char name[256]; char agestr[3]; int age;
printf("Привет, как вас зовут? ");
fgets(name, sizeof(name), stdin); // по идее fgetws должен уметь читать юникод
{
const size_t ln = strlen(name);
if (ln > 0 && name[ln-1] == '\n')
name[ln-1] = '\0';
}
printf("Очень приятно, %s, сколько вам лет? ", name); // если в name кириллица, то ничего не выводит вместо %s
fgets(agestr, sizeof(agestr), stdin);
age = atoi(agestr);
if (age == 18)
printf("Мне столько же! Просто прекрасно!");
else
printf("Мне 18 лет. Я на %i лет/года %s вас!", abs(age-18), ((age>18)? "младше" : "старше"));
}
Файл сохраняй в кодировке CP866.
У меня работает: https://imgur.com/a/gkw2EyL
Исходная версия fsb4000, :
Поскольку твой Linux скорее всего Windows судя по этому треду или ты wine-gcc собираешь, но тогда разницы не много с Windows, то попробуй так:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
setlocale(LC_ALL, ".866"); // or, at least, LC_CTYPE
char name[256]; char agestr[3]; int age;
printf("Привет, как вас зовут? ");
fgets(name, sizeof(name), stdin); // по идее fgetws должен уметь читать юникод
{
const size_t ln = strlen(name) - 1;
if (name[ln] == '\n')
name[ln] = '\0';
}
printf("Очень приятно, %s, сколько вам лет? ", name); // если в name кириллица, то ничего не выводит вместо %s
fgets(agestr, sizeof(agestr), stdin);
age = atoi(agestr);
if (age == 18)
printf("Мне столько же! Просто прекрасно!");
else
printf("Мне 18 лет. Я на %i лет/года %s вас!", abs(age-18), ((age>18)? "младше" : "старше"));
}
Файл сохраняй в кодировке CP866.
У меня работает: https://imgur.com/a/gkw2EyL