C ++:读取一个字符是不正确的

时间:2017-08-29 18:30:05

标签: c++ char hex scanf

尝试从C ++中的文本文件中读取字符时遇到一个奇怪的问题。当它找到撇号(十六进制92)时,它将其读取为多个字符。对于字符串"它是"我明白了:

i - 69
t - 74
’ - ffffff92
s - 73
it’s

以下是代码:

{
    FILE* fp = fopen("word.txt", "rb");
    char buf[111];

    fscanf(fp, "%s", buf);

    for (int i = 0; i < strlen(buf);   ++i)
        printf("%c - %x\n", buf[i], buf[i]);

    printf(buf);
}

打开&#34; r&#34;给出相同的结果。我如何阅读撇号作为它的单个字符?谢谢!

1 个答案:

答案 0 :(得分:1)

将buf [i]转换为unsigned char - 正确读取字符 - 但是在打印时 - 因为它是负数 - 它被扩展为int然后被设置为unsigned int所以你看到ffffff92 - 转换为unsigned应该正确显示值


=ARRAYFORMULA(match(vlookup(C24, 'age range'!$A1:$B4, 2),vlookup(heba_immediate_family!D2:D19,'age range'!$A1:$B4,2),1))

输出

#include<cstdio>

int main() {

    char ch = static_cast<char>(0x92);
    printf("%c - %x/%x\n", ch,ch,static_cast<unsigned char>(ch));

    return 0;
}