如何在Windows控制台

时间:2017-11-23 09:20:15

标签: c windows

我试图谷歌这个问题,但没有找到明确的答案。我正在为自己编写一个程序来练习英语和西班牙语。这很简单,我的单词有词汇量,所以我创建了一个代码,随机选择一个单词,在监视器中显示,第二个“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");
}

1 个答案:

答案 0 :(得分:2)

此问题与字符编码有关:如您所知,计算机使用二进制或一般数字,而不是字母。因此,char只是一种1字节整数

char letter = '0'; // letter contain 48

将这些数字映射到字形(字母)有几个标准,您的控制台必须理解此标准才能正确呈现标准输出。

关于第一个字符编码标准是ASCII,遗憾的是只能理解英文字符,然后是拉丁语,以及其他适应性以获得大多数欧洲集合。

最后,Unicode被接受,因为它允许世界上大多数字符,包括大约120000个代码点。这显然需要每个字符几个字节,它触发UTF8,UTF16等,以便通过计算机字符串处理Unicode。

回答您的问题,以显示您需要的复杂字符:

1)将文本编码为接受这些字符的标准(例如UTF8)为此,您可以实施自己的标准,或使用在线提供的众多库中的一种。

2)使用了解UTF8的控制台。不确定Windows的默认控制台。

请注意,C不保证其中包含特殊字符支持,因此代码中的ñ可能会被拒绝。另一种选择是2到几个字节的转义序列,如'\241'匹配目标编码。