此程序旨在将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 :(得分: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语句有效地使函数中的所有其余代码“死代码”。