#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]);