代码无效且代码无法访问
此程序旨在将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;
}
编辑:确定最终确定,所以很多愚蠢的错误,谢谢你的帮助。此外,程序应询问用户是否要输入另一个值,如果是,请重复该过程。做这件事的方式有很多种,只是想知道你们认为是做这件事的最好方式。
你重新调整之前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语句,则其余代码将不会执行。
这些语句实际上做了什么,'(c + 13);','(c-13);'和'c;'。我对c不是很了解,但在c#中它们毫无意义。 – Jodrell 2011-05-15 09:33:15