将西里尔字母符号保存在 C 语言的 txt 文件中



我在C语言中相对较新。

我将粘贴在此处的以下程序只是说明我的问题。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char letters[7];
    int a, b, c, d, e, f, g;
    printf("letters:n");
    gets(letters);
    printf("%c",letters[0]);
    printf("n");
    printf("%c",letters[1]);
    printf("n");
    printf("%c",letters[2]);
    printf("n");
    printf("%c",letters[3]);
    printf("n");
    printf("%c",letters[4]);
    printf("n");
    printf("%c",letters[5]);
    printf("n");
    printf("%c",letters[6]);
    printf("n");
    printf("n");
    printf("%dn",sizeof(letters));
    FILE*fptr;
    fptr=fopen("combo.txt", "w");
    for(a=0;a<=sizeof(letters)-1;a++)
    {
        for(b=0;b<=sizeof(letters)-1;b++)
        {
            for(c=0;c<=sizeof(letters)-1;c++)
            {
                for(d=0;d<=sizeof(letters)-1;d++)
                {
                    for(e=0;e<=sizeof(letters)-1;e++)
                    {
                        for(f=0;f<=sizeof(letters)-1;f++)
                        {
                            for(g=0;g<=sizeof(letters)-1;g++)
                            {
                                if (!(a==b||a==c||a==d||a==e||a==f||a==g||
                                            b==c||b==d||b==e||b==f||b==g||
                                                  c==d||c==e||c==f||c==g||
                                                        d==e||d==f||d==g||
                                                              e==f||e==g||
                                                                    f==g))
                                {
                                    fprintf(fptr,"%c",letters[a]);
                                    fprintf(fptr,"%c",letters[b]);
                                    fprintf(fptr,"%c",letters[c]);
                                    fprintf(fptr,"%c",letters[d]);
                                    fprintf(fptr,"%c",letters[e]);
                                    fprintf(fptr,"%c",letters[f]);
                                    fprintf(fptr,"%c",letters[g]);
                                    fprintf(fptr,"n");
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    fclose(fptr);
    return 0;
}

该程序确实:

  • 将键盘输入作为字符串读取

  • 将其保存到名为"信"

  • 将新行上的每个元素打印到控制台中

  • 打印下面两行字符串的长度

  • 以各种可能的方式组合符号,除了在一个单词中将某个位置后面的符号重复两次并将组合写入文件"combo.txt"。

我的问题是,我可以用西里尔符号做到这一点,而不仅仅是拉丁字母?

如果可能(我相信是),我应该在我的代码中添加或更改什么?

你可以用西里尔字符来做到这一点,是的。但是,这将需要对一个相当复杂的主题进行一些学习。

国际化程序需要了解区域设置、字符集和编码。尝试处理这些问题的现代方法是使用称为Unicode的字符集,通常采用称为UTF-8的编码(如果您使用的是类Unix操作系统)。在 Windows 上,您更有可能遇到 UTF-16。

我建议你从这里开始:https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/

祝你好运!

使用 fgets 而不是 gets 改进的程序如下所示:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char letters[7];
    int a, b, c, d, e, f, g;
    printf("letters:n");
    //gets(letters);
    fgets(letters,8,stdin);
    printf("%c",letters[0]);
    printf("n");
    printf("%c",letters[1]);
    printf("n");
    printf("%c",letters[2]);
    printf("n");
    printf("%c",letters[3]);
    printf("n");
    printf("%c",letters[4]);
    printf("n");
    printf("%c",letters[5]);
    printf("n");
    printf("%c",letters[6]);
    printf("n");
    printf("n");
    printf("%dn",sizeof(letters));
    FILE*fptr;
    fptr=fopen("combo.txt", "w");
    for(a=0;a<=sizeof(letters)-1;a++)
    {
        for(b=0;b<=sizeof(letters)-1;b++)
        {
            for(c=0;c<=sizeof(letters)-1;c++)
            {
                for(d=0;d<=sizeof(letters)-1;d++)
                {
                    for(e=0;e<=sizeof(letters)-1;e++)
                    {
                        for(f=0;f<=sizeof(letters)-1;f++)
                        {
                            for(g=0;g<=sizeof(letters)-1;g++)
                            {
                                if (!(a==b||a==c||a==d||a==e||a==f||a==g||
                                            b==c||b==d||b==e||b==f||b==g||
                                                  c==d||c==e||c==f||c==g||
                                                        d==e||d==f||d==g||
                                                              e==f||e==g||
                                                                    f==g))
                                {
                                    fprintf(fptr,"%c",letters[a]);
                                    fprintf(fptr,"%c",letters[b]);
                                    fprintf(fptr,"%c",letters[c]);
                                    fprintf(fptr,"%c",letters[d]);
                                    fprintf(fptr,"%c",letters[e]);
                                    fprintf(fptr,"%c",letters[f]);
                                    fprintf(fptr,"%c",letters[g]);
                                    fprintf(fptr,"n");
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    fclose(fptr);
    return 0;
}

无论如何,问题仍然存在。如果我设法在其他人之前解决它,我会在这里发布一个解决方案。:)

最新更新