代码无效且代码无法访问

问题描述:

此程序旨在将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; 
} 

编辑:确定最终确定,所以很多愚蠢的错误,谢谢你的帮助。此外,程序应询问用户是否要输入另一个值,如果是,请重复该过程。做这件事的方式有很多种,只是想知道你们认为是做这件事的最好方式。

+0

这些语句实际上做了什么,'(c + 13);','(c-13);'和'c;'。我对c不是很了解,但在c#中它们毫无意义。 – Jodrell 2011-05-15 09:33:15

你重新调整之前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)函数被调用。

您的代码是......怪异的...... 由于您返回​​而无法返回第13行之后的任何代码。编译器是正确的。

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

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

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

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

什么是你期待(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语句,则其余代码将不会执行。