我试图谷歌这个问题,但没有找到明确的答案。我正在为自己编写一个程序来练习英语和西班牙语。这很简单,我的单词有词汇量,所以我创建了一个代码,随机选择一个单词,在监视器中显示,第二个“Enter”将显示其他语言的翻译。现在我只用英语做了 - >西班牙。但总的来说我想做俄罗斯 - >英语加西班牙语。问题是在Windows控制台中不能正确显示不同的语言。我需要有俄语cyrylica,西班牙语特殊符号,如ñ和英语单词转录。我使用NetBeans IDE,它自己的控制台不能很好地处理scanf函数,所以我必须使用Windows控制台。 有没有办法做到这一点? 这是代码。我使用随机生成的符号然后我使用其他代码来排除重复的数字。它只是一个原型,原始词汇有几千个单词。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#define WORDS 25
void func_words(int rnd);
int main(void) {
system("COLOR B0");
srand((time)(NULL));
char ch;
int random;
int count=0;
int rand_array[1000];
int MATCH;
printf("\nPress Enter to continue:");
while(scanf("%c",&ch)&&ch=='\n')
{
for(int i=0;random=rand()%WORDS+1;i++)
{
MATCH=0;
rand_array[i]=random;
for(int j=0;j<i;j++)
{
if(random==rand_array[j])
MATCH++;
}
if(MATCH!=0)
continue;
func_words(random);
count++;
printf("\n%i\n",count);
if(count==WORDS)
break;
}
printf("\nFINISH!\n");
}
return 0;
}
void func_words(int rnd)
{
char ch2;
char *ar[WORDS][2]={
{"Costumbre","Habbit, bad habbit"},
{"Comer", "Eat, Eating, Meal"},
{"Beber", "Drink, you drink too much"},
{"Costumbre", "Habit, annoying habit"},
{"referirse", "Refer"},
{"el verbo", "Verb"},
{"Aplicar, emplear", "Apply, We applied to the authorities for assistance. To apply the new method"},
{"oración", "Sentence, make up a sentence, affirmative sentence"},
{"piel", "Skin, leather"},
{"las mejillas", "Cheek"},
{"bigote", "Moustache, Whisker"},
{"barba", "beard"},
{"las pestañas", "eyelash"},
{" lengua", "language tongue"},
{" los órganos internos", "internals "},
{"lung ", "los pulmones"},
{"liver ", "hígado"},
{"riñones", "Kidney "},
{"cuello", "neck "},
{"hueso", "Bones "},
{"músculo musculatura", "muscle "},
{"nervio", "Nerves "},
{"nervio", "breathe"},
{"Reír / risa", "laugh smile "},
{"mentón", "chin "},
{"las cejas", "eyebrow "},
{"", ""},
};
printf(" %s",ar[rnd-1][0]);
scanf("%c",&ch2);
printf("\n");
printf(" %s",ar[rnd-1][1]);
printf("\n---------------------------\n");
}
答案 0 :(得分:2)
此问题与字符编码有关:如您所知,计算机使用二进制或一般数字,而不是字母。因此,char
只是一种1字节整数
char letter = '0'; // letter contain 48
将这些数字映射到字形(字母)有几个标准,您的控制台必须理解此标准才能正确呈现标准输出。
关于第一个字符编码标准是ASCII,遗憾的是只能理解英文字符,然后是拉丁语,以及其他适应性以获得大多数欧洲集合。
最后,Unicode被接受,因为它允许世界上大多数字符,包括大约120000个代码点。这显然需要每个字符几个字节,它触发UTF8,UTF16等,以便通过计算机字符串处理Unicode。
回答您的问题,以显示您需要的复杂字符:
1)将文本编码为接受这些字符的标准(例如UTF8)为此,您可以实施自己的标准,或使用在线提供的众多库中的一种。
2)使用了解UTF8的控制台。不确定Windows的默认控制台。
请注意,C不保证其中包含特殊字符支持,因此代码中的ñ
可能会被拒绝。另一种选择是2到几个字节的转义序列,如'\241'
匹配目标编码。