我正在尝试执行一个程序,它接收一个字符数组作为输入,每个字母都被另一个字母替换。在下面的代码中,我只考虑一个更改('a' - >'h'),但只要程序适用于该更改,我将实现其他更改(例如,基于Caesar的Cipher)。 问题是程序编译成功,但是,当我运行它时,如果我插入'a',他返回另一个'a'(它应该返回'h')。 代码有什么问题? 提前致谢。
#include <stdio.h>
void ciphering (char text[])
{
int i;
for (i=0; i!='\0'; i++)
{
if (text[i]>='a' && text[i]<='z')
{
if (text[i]=='a')
text[i]='h';
}
}
}
int main()
{
char text[1000];
scanf("%s", text);
ciphering(text);
printf("%s\n", text);
return 0;
}
答案 0 :(得分:1)
函数中的for
循环有
for(i = 0; i != '\0'; ++i)
^^^^^^^^^
将其更改为:
for(i = 0; text[i] != '\0'; ++i)
因为您要检查text[i]
何时有NUL
个字符。
答案 1 :(得分:1)
0
和'\0'
是相同的。
for(i = 0; i != '\0'; ++i)
我把它读作:“对于我来自零而它不同于零...”这实际上意味着循环不会一次运行。
答案 2 :(得分:0)
程序没有进入for()
循环,因为延续条件为false:
for (i = 0; i != '\0'; i ++) {
您需要测试的是i
(当前分析的字符的索引)不指向空字符。该行应为:
for (i = 0; text[i] != '\0'; i ++) {