Ascii字符编码问题

Ascii字符编码问题,c,ascii,C,Ascii,对于每个字母,它将被第二个字母替换,空格将被“”替换。问题在于scanf的格式字符串。如果要从控制台读取一行文本,应使用%s 如果要确保最多读取79个字符,应使用%79s(因为行向量的长度为80) 因此,您应该用以下内容替换scanf: enter the string Hello World 456 Output Ifmmp.uif.tusjof 您没有正确检查您的状况: scanf("%79s", line); 永远不会被执行。但这并不是唯一的错误。字符“A”应翻译为“B”,而不是“Z”

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

问题在于
scanf
的格式字符串。如果要从控制台读取一行文本,应使用
%s

如果要确保最多读取79个字符,应使用
%79s
(因为行向量的长度为80)

因此,您应该用以下内容替换scanf:

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

您没有正确检查您的状况:

scanf("%79s", line);
永远不会被执行。但这并不是唯一的错误。字符“A”应翻译为“B”,而不是“Z”。你可能想要

if (line [count]== 'A')putchar('Z');
小写和数字也是如此。

这是可疑的:

if (line [count]== 'Z')putchar('A');
应该是:

scanf("%[ˆ\n]",line);
您的版本有一个多字节字符,看起来有点像
^
,而不是
^
。这会导致你的扫描出现故障。您的症状听起来好像输入的文本实际上是多字节字符


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

您的输出将转换回“Hello the string”。这就是你应该做的吗?你想要的输出似乎对应于文本“
Hello the strine
”而不是所声称的“
Hello World 456
”。修改器停止在空白处;
[
修饰符只会在列出的字符上停止。这个糟糕的特殊字符捕获被很好地发现了!OP必须使用一个死键代码——Mac上的Option+i——来获取
ˆ
而不是通常的Shift+6(在美国键盘上),该键被有用地标记为“6^”。可能使用了一个“有用”的傻瓜编辑器用漂亮的unicode字符替换乏味的旧ascii字符。
if (line[count]>= 'A' && line[count] < 'Z)
if (line [count]== 'Z')putchar('A');
scanf("%[ˆ\n]",line);
scanf("%79[^\n]",line);