代码无效,代码无法访问

时间:2011-05-15 09:26:14

标签: c effect rot13

此程序旨在将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 ) );
}
编辑:我愚蠢地把返回那里没有注意到,这修复了无法访问的错误。但我仍然不知道为什么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;
}

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

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

此外,该怎么办?            else              c;

该怎么办?

我认为您将从编写基础知识中受益。特别是,=是赋值运算符。它的工作方式是将=右侧的表达式“赋值”给左侧的变量(或const)。因此,为了将c增加13,您需要编写c = c + 13;这将评估c + 13,然后将该值保留在c内。

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

答案 3 :(得分: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
    .....
}

<强>解释

在调用return函数时,

return语句将发送回控制流而不执行r13(int c)语句下面的代码。

答案 4 :(得分:0)

你的代码......很奇怪...... 返回isalpha(c)时,无法访问第13行之后的任何代码。编译器是对的。

你还应该更多地关注代码美学(丑陋的代码可能导致这种错误)。

答案 5 :(得分:0)

r13函数的星号处的return语句有效地使函数中的所有其余代码“死代码”。