C 第一个字母与第一个单词重复

C 第一个字母与第一个单词重复,c,file,binary,file-handling,C,File,Binary,File Handling,我从文件中读取文本并将其作为二进制文件输出。我已经按照以下方式修改了二进制转换: 每个大写字母应以01开头,后跟5位 5位应保存字母的值 这些字母的值为A-2、B-3、C-4、D-5 例如:HI->(0101001)(0101010) 我的代码片段如下所示: void printinbits(int n) { for (int c = 4; c >= 0; c--) { long int k = n >> c; if (k &a

我从文件中读取文本并将其作为二进制文件输出。我已经按照以下方式修改了二进制转换:

  • 每个大写字母应以01开头,后跟5位
  • 5位应保存字母的值
  • 这些字母的值为A-2、B-3、C-4、D-5
  • 例如:HI->(0101001)(0101010)

    我的代码片段如下所示:

    void printinbits(int n)
    {
        for (int c = 4; c >= 0; c--)
        {
            long int k = n >> c;
    
            if (k & 1)
                printf("1");
            else
                printf("0");
        }        
    }
    
    int main()
    {
        //first letter is being repeated
        char check[200];
        FILE*fin= fopen("/Users/priya/Desktop/test.txt.rtf","r");
        while((fscanf(fin,"%199s",check))==1)
        {
            for(int i=0;i<strlen(check);++i)
            {
                if(check[i]>=65&&check[i]<=90)
                {
                    printf("01");
                    int n=check[i];
                    n-=63;
                    printinbits(n);
                }
            }
        }
        return 0;
    }
    
    我的输出->

    HELLO
    
    (0101001)(0101001)(0100110)(0101101)(0101101)(0110000)
    

    (如您所见,第一个字母H被重复)(各种字母用括号分隔)

    这里是一个文件
    hello.rtf
    的十六进制转储,其中包含大写的单词
    hello
    。它是由Mac上的TextEdit生成的

    0x0000: 7B 5C 72 74 66 31 5C 61 6E 73 69 5C 61 6E 73 69   {\rtf1\ansi\ansi
    0x0010: 63 70 67 31 32 35 32 5C 63 6F 63 6F 61 72 74 66   cpg1252\cocoartf
    0x0020: 31 34 30 34 5C 63 6F 63 6F 61 73 75 62 72 74 66   1404\cocoasubrtf
    0x0030: 34 36 30 0A 7B 5C 66 6F 6E 74 74 62 6C 5C 66 30   460.{\fonttbl\f0
    0x0040: 5C 66 73 77 69 73 73 5C 66 63 68 61 72 73 65 74   \fswiss\fcharset
    0x0050: 30 20 48 65 6C 76 65 74 69 63 61 3B 7D 0A 7B 5C   0 Helvetica;}.{\
    0x0060: 63 6F 6C 6F 72 74 62 6C 3B 5C 72 65 64 32 35 35   colortbl;\red255
    0x0070: 5C 67 72 65 65 6E 32 35 35 5C 62 6C 75 65 32 35   \green255\blue25
    0x0080: 35 3B 7D 0A 5C 6D 61 72 67 6C 31 34 34 30 5C 6D   5;}.\margl1440\m
    0x0090: 61 72 67 72 31 34 34 30 5C 76 69 65 77 77 31 30   argr1440\vieww10
    0x00A0: 38 30 30 5C 76 69 65 77 68 38 34 30 30 5C 76 69   800\viewh8400\vi
    0x00B0: 65 77 6B 69 6E 64 30 0A 5C 70 61 72 64 5C 74 78   ewkind0.\pard\tx
    0x00C0: 37 32 30 5C 74 78 31 34 34 30 5C 74 78 32 31 36   720\tx1440\tx216
    0x00D0: 30 5C 74 78 32 38 38 30 5C 74 78 33 36 30 30 5C   0\tx2880\tx3600\
    0x00E0: 74 78 34 33 32 30 5C 74 78 35 30 34 30 5C 74 78   tx4320\tx5040\tx
    0x00F0: 35 37 36 30 5C 74 78 36 34 38 30 5C 74 78 37 32   5760\tx6480\tx72
    0x0100: 30 30 5C 74 78 37 39 32 30 5C 74 78 38 36 34 30   00\tx7920\tx8640
    0x0110: 5C 70 61 72 64 69 72 6E 61 74 75 72 61 6C 5C 70   \pardirnatural\p
    0x0120: 61 72 74 69 67 68 74 65 6E 66 61 63 74 6F 72 30   artightenfactor0
    0x0130: 0A 0A 5C 66 30 5C 66 73 32 34 20 5C 63 66 30 20   ..\f0\fs24 \cf0 
    0x0140: 48 45 4C 4C 4F 7D                                 HELLO}
    0x0146:
    
    您可能会看到,也可能无法看到“Helvetica”的
    H
    作为文件中唯一的其他大写字母,这将解释产生HHELLO输出的原因。看起来你可能也在Mac电脑上,所以也许你会看到同样的结果——或者,至少,一个相当的结果。(我使用了一个自制的十六进制转储程序;您可能会使用
    xxd-g1test.txt.rtf
    ,它将生成带有小写字母的十六进制,并且不包括最后的字节计数行。)

    您可以而且应该打印程序在循环中读取的数据,至少在调试时是这样,这样您就可以看到程序正在处理什么。这是一种非常基本的调试技术

    在文本编辑中,您可以使用“格式”菜单下的“生成纯文本”或“生成富文本”选项,或使用⇧⌘T(换档命令T)在两种模式之间切换。注意文件名是如何更改的


    社区Wiki可能存在问题。

    这里是一个文件
    hello.rtf
    的十六进制转储,其中包含大写的单词
    hello
    。它是由Mac上的TextEdit生成的

    0x0000: 7B 5C 72 74 66 31 5C 61 6E 73 69 5C 61 6E 73 69   {\rtf1\ansi\ansi
    0x0010: 63 70 67 31 32 35 32 5C 63 6F 63 6F 61 72 74 66   cpg1252\cocoartf
    0x0020: 31 34 30 34 5C 63 6F 63 6F 61 73 75 62 72 74 66   1404\cocoasubrtf
    0x0030: 34 36 30 0A 7B 5C 66 6F 6E 74 74 62 6C 5C 66 30   460.{\fonttbl\f0
    0x0040: 5C 66 73 77 69 73 73 5C 66 63 68 61 72 73 65 74   \fswiss\fcharset
    0x0050: 30 20 48 65 6C 76 65 74 69 63 61 3B 7D 0A 7B 5C   0 Helvetica;}.{\
    0x0060: 63 6F 6C 6F 72 74 62 6C 3B 5C 72 65 64 32 35 35   colortbl;\red255
    0x0070: 5C 67 72 65 65 6E 32 35 35 5C 62 6C 75 65 32 35   \green255\blue25
    0x0080: 35 3B 7D 0A 5C 6D 61 72 67 6C 31 34 34 30 5C 6D   5;}.\margl1440\m
    0x0090: 61 72 67 72 31 34 34 30 5C 76 69 65 77 77 31 30   argr1440\vieww10
    0x00A0: 38 30 30 5C 76 69 65 77 68 38 34 30 30 5C 76 69   800\viewh8400\vi
    0x00B0: 65 77 6B 69 6E 64 30 0A 5C 70 61 72 64 5C 74 78   ewkind0.\pard\tx
    0x00C0: 37 32 30 5C 74 78 31 34 34 30 5C 74 78 32 31 36   720\tx1440\tx216
    0x00D0: 30 5C 74 78 32 38 38 30 5C 74 78 33 36 30 30 5C   0\tx2880\tx3600\
    0x00E0: 74 78 34 33 32 30 5C 74 78 35 30 34 30 5C 74 78   tx4320\tx5040\tx
    0x00F0: 35 37 36 30 5C 74 78 36 34 38 30 5C 74 78 37 32   5760\tx6480\tx72
    0x0100: 30 30 5C 74 78 37 39 32 30 5C 74 78 38 36 34 30   00\tx7920\tx8640
    0x0110: 5C 70 61 72 64 69 72 6E 61 74 75 72 61 6C 5C 70   \pardirnatural\p
    0x0120: 61 72 74 69 67 68 74 65 6E 66 61 63 74 6F 72 30   artightenfactor0
    0x0130: 0A 0A 5C 66 30 5C 66 73 32 34 20 5C 63 66 30 20   ..\f0\fs24 \cf0 
    0x0140: 48 45 4C 4C 4F 7D                                 HELLO}
    0x0146:
    
    您可能会看到,也可能无法看到“Helvetica”的
    H
    作为文件中唯一的其他大写字母,这将解释产生HHELLO输出的原因。看起来你可能也在Mac电脑上,所以也许你会看到同样的结果——或者,至少,一个相当的结果。(我使用了一个自制的十六进制转储程序;您可能会使用
    xxd-g1test.txt.rtf
    ,它将生成带有小写字母的十六进制,并且不包括最后的字节计数行。)

    您可以而且应该打印程序在循环中读取的数据,至少在调试时是这样,这样您就可以看到程序正在处理什么。这是一种非常基本的调试技术

    在文本编辑中,您可以使用“格式”菜单下的“生成纯文本”或“生成富文本”选项,或使用⇧⌘T(换档命令T)在两种模式之间切换。注意文件名是如何更改的


    社区Wiki可能会出现问题。

    建议:在输出中添加某种分隔符,否则,它将';It’很难阅读和理解…@SouravGhosh done.当我阅读
    stdin
    时,我不需要重复就能得到想要的行为。您似乎正在将富格文本格式文件作为原始数据读取。您可以尝试读取纯文本文件吗?打印
    检查
    的值,同时在
    for
    循环之前打印
    循环中的
    值。您确定文件中没有
    HHELLO
    ?这是最基本的调试技术:打印计算机得到的内容,以确保它看到了您认为应该看到的内容。与您正在观察的问题无关,您的一个循环有一个明显的问题:
    for(int i=0;IsSuggestion:在输出中添加某种分隔符,否则很难阅读和理解…@SouravGhosh done.当我从
    stdin
    读取时,我无需重复就能获得所需的行为。您似乎正在将富格文本格式的文件作为原始数据读取。是否可以尝试读取纯文本文件?打印
    检查的值while
    循环中,在
    for
    循环之前执行
    操作。您确定文件中没有
    HHELLO
    吗?这是最基本的调试技术:打印计算机得到的内容,以确保它看到了您认为应该看到的内容。与您正在观察的问题无关,您的一个循环有一个明显的问题lem:
    用于(int i=0;i