#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/