c - Ascii 字符编码问题

标签 c ascii

#include <stdio.h>
int main()
{
    char line[80];
    int count;
    // read the line of charecter
    printf("Enter the line of text below: \n");
    scanf("%[ˆ\n]",line);
// encode each individual charecter and display them
    for(count = 0; line[count]!= '\0'; ++ count){
        if(((line[count]>='0')&& (line [count]<= '9')) ||
           ((line[count]>= 'A')&& (line[count]<='Z')) ||
           ((line[count]>= 'a')&& (line[count]<='z')))
            putchar(line[count]+1);
        else if (line[count]=='9')putchar('0');
        else if (line [count]== 'A')putchar('Z');
        else if (line [count]== 'a') putchar('z');
        else putchar('.');
    }
}

上面代码中的问题是转换编码。每当我编译代码时,编译器会自动转换编码,然后我无法获得所需的输出。 我的目标输出应该是这样的:

enter the string
Hello World 456
Output
Ifmmp.uif.tusjof

对于每个字母,它由第二个字母替换,空格由“.”替换。

最佳答案

这是可疑的:

scanf("%[ˆ\n]",line);

应该是:

scanf("%79[^\n]",line);

您的版本有一个多字节字符,看起来有点像 ^,而不是 ^。这会导致您的扫描出现故障。您的症状听起来好像输入的文本实际上是多字节字符。

顺便说一句,您可以使用 isalnum( (unsigned char)line[count] ) 使您的代码更易于阅读。该测试将取代您的 a-z、A-Z、0-9 测试。

关于c - Ascii 字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726345/

相关文章:

c - MSVC 1900 并定义 vsnprintf

c - 从 SSH 服务器发送 channel 请求,使 `ssh_channel_accept_forward()` 在 SSH 客户端上返回?

c - C 中的链表实现 - 段错误

c - 在 PKCS#11 中使用 key 对象句柄

java - 将字符附加到文件

character-encoding - 什么是垂直制表符?

c - 函数调用给出参数类型不兼容的错误

c - 比较 ASCII 值的最佳方法

python - Python 中的二进制到 ASCII

php - 将特殊字符(即元音变音)转换为最可能的 ascii 表示形式