Код не имеет никакого эффекта, а код недоступен
Эта программа предназначена для применения 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 ) );
}
РЕДАКТИРОВАТЬ: я тупо положить туда туда, не замечая, что исправляет недостижимую ошибку. Но я до сих пор не знаю, почему с +13 и с-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 ответов
Тебе нужно c = c + 13;
или же c = c - 13;
изменить значение ц. Чтобы вернуть значение с вам нужно 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 в начале вашей функции, остальная часть кода не будет выполнена.
Да, они не имеют эффекта. Трудно догадаться, что ты имел в виду, но ты просто скучаешь по return
ключевые слова перед ними?
Вы перенастраиваетесь раньше 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)
функция называется.
Оператор return в звездочке вашей функции r13 фактически превращает весь остальной код в функцию в "мертвый код".
Ваш код... странный... Любой код после строки 13 не может быть достигнут, как вы вернетесь isalpha(c)
, Компилятор прав.
Вы также должны уделять больше внимания эстетике кода (уродливый код может привести к такого рода ошибкам).