c语言 - 凯撒代码程序不适用于字母"Z"。这是怎么回事?


#include <stdio.h>
int main(void)
{
char a[50];
gets(a);
for(int i=0;i<a[i];i++)
{
if(a[i]=="z")  //should print a for z
printf("a");
else if (a[i]=="Z") //should print A for Z
printf("A");
else if(a[i]<="Z"||a[i]<="z") //else print other char+1
printf("%c", a[i]+1);
}
}

当 a[i]==Z 时,此代码不返回 A。它返回 { 表示 z,返回 [ 表示 Z。这里可能出了什么问题?为什么 if-else 语句不起作用?

for 循环中的条件

for(int i=0;i<a[i];i++)

没有意义。例如,用户可以输入将放置在数组中某个位置的任何符号,该位置(符号(的值将小于位置的值。在这种情况下,循环将被中断。

看来你的意思是

for ( int i = 0; a[i] != 0; i++ )

此外,功能gets不安全,不受 C 标准支持。而是使用标准 C 函数fgets。例如

fgets(a, sizeof( a ), stdin );

在条件 In if 语句中,您使用字符串文字(例如"Z"(而不是字符作为'Z'

所以重写 if 语句至少像

if( a[i] == 'z')  //should print a for z
putchar( 'a');
else if (a[i] == 'Z') //should print A for Z
putchar( 'A');
else if( ( 'A' <= a[i] && a[i] < 'Z' )|| 
( 'a' <= a[i] && a[i] < 'z' ) ) //else print other char+1
putchar( a[i] + 1 );

双引号创建字符串(char数组(,但a[i]是一个char。不能将char与字符串进行比较。您需要使用单引号来创建char文本。

if(a[i]=='z')  //should print a for z
printf("a");
else if (a[i]=='Z') //should print A for Z
printf("A");
else if(isalpha(a[i])) //other letters print char+1
printf("%c", a[i]+1);
else // everything else stays the same
printf("%c", a[i]);

最新更新