0

该程序旨在将 rot13 应用于输入。但是,当我编译时,我收到警告,第 20、23、29 行对代码没有影响,第 17 行是无法访问的代码。当输入任何内容时,它只会继续程序并留下一个空白区域。怎么了?

int main()
{
int c;

while ( ( c = getchar() ) != EOF )
    putchar( r13( c ) );

return 0;
}

int r13(int c)
{

if(( tolower( c ) >='a' && c <='z'))
    {
        if((c) < 'm')
             (c = c + 13);
        else
        {
                (c = c - 13);

        }
    }

    else
         c = c;
    return ( isalpha( c ) );
}

编辑:我愚蠢地把 return 放在那里而没有注意到,这修复了无法访问的错误。但是我仍然不知道为什么 c+13 和 c-13 没有效果?

编辑:我想用 C 创建一个程序,它是一个 rot13 编码器/解码器。这是原始代码,工作正常。但是我想转换为模数设计,我缺乏知识导致我失败了。希望这可以帮助人们理解我想要做什么。

int main(void)
{
int c,e;

while((c=getchar())!=EOF)
{
    if(c >='A' && c <='Z')
    {
        if((e = c + ROT) <= 'Z')
            putchar(e);
        else
        {
               e = c - ROT;
            putchar(e);
        }
    }
    else if(c >='a' && c <='z')
    {
        if((e= c + ROT) <= 'z')
            putchar(e);
        else
        {
            e = c - ROT;
            putchar(e);
        }
    }
    else
        putchar(c);
}

return 0;
}

编辑:好的,终于修复了,这么多愚蠢的错误,谢谢你的帮助。此外,程序应询问用户是否希望输入另一个值,如果是,则重复该过程。有很多方法可以做到这一点,只是想知道你们认为最好的方法是什么。

4

6 回答 6

1

是的,它们没有效果。很难猜出你的意思,但你只是错过了return他们之前的关键字吗?

于 2011-05-15T09:30:56.553 回答
1

您需要 c = c + 13;c = c - 13;更改 c 的值。要返回 c 的值,您需要return c;

于 2011-05-15T09:39:16.190 回答
1

你期待(c + 13);做什么?这只是评估......但什么也不做。它不会修改c. 为了修改c以包含c + 13您需要编写的值c = c + 13; 请记住,您已将 c 声明为“int”而不是“char”。

还有,是怎么回事 else c;

那应该做什么?

我认为你会从学习编程基础知识中受益。尤其=是赋值运算符。它的工作方式是将右侧的表达式=“分配”给左侧的变量(或常量)。因此,为了将 c 增加 13,您需要编写c = c + 13; This 计算c + 13,然后将该值粘贴到c.

另一个关键概念是return函数内部。返回一个值结束函数并将该值提供给调用该函数的任何对象。请记住,计算机按顺序执行所有内容,因此如果您在函数开头添加 return 语句,则其余代码将不会执行。

于 2011-05-15T09:41:13.157 回答
0

你之前正在重新调整if()

int r13(int c) 
{ 
   return ( isalpha( c ) );        //put it last line of your function

   if(( tolower( c ) >='a' && c <='z'))   //this will be unreachable
    .....
}

解释:

returnreturn当你的r13(int c)函数被调用时,语句将发回控制流而不执行语句下面的代码。

于 2011-05-15T09:30:13.633 回答
0

您的代码......很奇怪......第 13 行之后的任何代码都无法在您返回时到达isalpha(c)。编译器是对的。

您还应该更加注意代码美学(丑陋的代码可能会导致这种错误)。

于 2011-05-15T09:30:42.163 回答
0

r13 函数开头的 return 语句有效地使函数中的所有其余代码成为“死代码”。

于 2011-05-15T09:30:49.917 回答