-2

我正在尝试做一个程序,它接收一个字符数组作为输入,每个字母都被另一个字母替换。在下面的代码中,我只考虑一个更改('a'-->'h'),但是一旦程序适用于该更改,我将实施其他更改(例如基于 Caesar's 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;
}
4

3 回答 3

1

for在函数中的循环有

for(i = 0; i != '\0'; ++i)
           ^^^^^^^^^

将其更改为:

for(i = 0; text[i] != '\0'; ++i)

因为你想检查什么时候text[i]有一个NUL字符。

于 2015-03-23T18:23:15.797 回答
1

0并且'\0',在你的 for 循环(和许多其他上下文)的上下文中是相同的。

for(i = 0; i != '\0'; ++i)

我将其读为:“对于 i 从零开始,而它与零不同......”这实际上意味着循环不会运行一次。

于 2015-03-23T18:27:14.460 回答
0

程序没有进入for()循环,因为继续条件为假:

for (i = 0; i != '\0'; i ++) {

您需要测试的是i(当前分析的字符的索引)不指向空字符。该行应为:

for (i = 0; text[i] != '\0'; i ++) {
于 2015-03-23T18:23:08.473 回答