#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
对于每个字母,它被第二个字母替换,空格被替换为&#39; .
&#39;。
答案 0 :(得分:2)
这是可疑的:
scanf("%[ˆ\n]",line);
应该是:
scanf("%79[^\n]",line);
您的版本有多字节字符,有点像^
,而不是^
。这会导致您的扫描出现故障。您的症状听起来好像输入的文本实际上是多字节字符。
顺便说一句,您可以使用isalnum( (unsigned char)line[count] )
让您的代码更易于阅读。该测试取代了你的a-z,A-Z,0-9测试。
答案 1 :(得分:1)
您没有正确检查您的情况:
if (line[count]>= 'A')&& (line[count]<='Z)
..
已经转换字符'Z'。下一次检查,
if (line [count]== 'A')putchar('Z');
永远不会执行。但这不是唯一错误的地方。字符'A'应翻译为'B',而不是'Z'。你可能想要
if (line[count]>= 'A' && line[count] < 'Z)
(<
代替<=
)和
if (line [count]== 'Z')putchar('A');
和小写和数字相同。
答案 2 :(得分:0)
问题是scanf
的格式字符串。如果要从控制台读取一行文本,则应使用%s
。
如果您想确保最多读取79个字符,则应使用%79s
(因为您的行向量的长度为80)。
所以你应该用这个替换你的scanf:
scanf("%79s", line);