Код не имеет никакого эффекта, а код недоступен - PullRequest
0 голосов
/ 15 мая 2011

Эта программа предназначена для применения 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 ]

1 голос
/ 15 мая 2011

Что вы ожидаете от (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 в начале вашей функции, остальная часть кода не будет выполнена.

1 голос
/ 15 мая 2011

Вам нужно c = c + 13; или c = c - 13;, чтобы изменить значение c. Чтобы вернуть значение c вам нужно return c;

1 голос
/ 15 мая 2011

Да, они не имеют эффекта. Трудно догадаться, что вы имели в виду, но вам не хватает ключевых слов return перед ними?

0 голосов
/ 15 мая 2011

Оператор возврата в звездочке вашей функции r13 эффективно превращает весь остальной код в функцию в "мертвый код".

0 голосов
/ 15 мая 2011

Ваш код ... странный ... Любой код после строки 13 не может быть достигнут при возврате isalpha(c). Компилятор прав.

Вы также должны уделять больше внимания эстетике кода (уродливый код может привести к такого рода ошибкам).

0 голосов
/ 15 мая 2011

вы перенастраиваетесь до 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) функция.

...