прописные и строчные буквы в c

Я попытался выяснить, почему программа не работает. Он превращает нижний регистр в верхний, скажем, я набираю «k», он возвращает K. Затем я продолжаю набирать «A», он не возвращает «a», а завершает работу. Но почему? Вот код:

#include <stdio.h>
#include <stdlib.h>


int main(){


char UPPER,LOWER;

printf("Enter UPPERCASE\n");
UPPER = getchar();
if (UPPER >= 65 && UPPER <= 90) 

{ 
    UPPER = UPPER + 32;
    printf("The UPPERCASE now is %c\n", UPPER);

}

printf("Enter lowercase\n");
LOWER = getchar();
if (LOWER >= 97 && LOWER <= 122)

{

    LOWER = LOWER - 32;
    printf("The lowercase now is %c\n", LOWER);

}


getchar();
getchar();

}

person user2309261    schedule 08.07.2014    source источник
comment
Когда вы запускаете его в отладчике или печатаете UPPER и LOWER (кстати, неверные имена переменных, попробуйте вместо этого upper и lower), каковы их значения?   -  person John3136    schedule 08.07.2014


Ответы (2)


Если вы скомпилируете и запустите этот код:

    void main(void)
    {
        char c = getchar();
        printf("c = %d %c\n", c, c);
        c = getchar();
        printf("c = %d %c\n", c, c);
    }

Вы увидите этот вывод:

    user@host ~/work/tmp $ ./test
    a
    c = 97 a
    c = 10 
    /* new line there*/

Этот код не тот, но работает:

    #include <stdlib.h>
    #include <stdio.h>

    #define BUFSIZE 4
    int main(void)
    {
        char UPPER[BUFSIZE] = {0}, LOWER[BUFSIZE] = {0};
        int i;

        printf("Enter UPPERCASE\n");
        fgets(UPPER, BUFSIZE, stdin);
        for(i = 0; i < BUFSIZE; i++)
        {
            if (UPPER[i] >= 65 && UPPER[i] <= 90) 

            { 
                UPPER[i] = UPPER[i] + 32;
            }
        }
        printf("The UPPERCASE now is %s", UPPER);

        printf("Enter LOWERCASE\n");
        fgets(LOWER, BUFSIZE, stdin);

        for(i = 0; i < BUFSIZE; i++)
        {
            if (LOWER[i] >= 97 && LOWER[i] <= 122) 

            { 
                LOWER[i] = LOWER[i] - 32;
            }
        }
        printf("The LOWERCASE now is %s", LOWER);
        return 0;
    }
person someuser    schedule 08.07.2014

Вы должны отдельно добавить getchar();, после printf("The UPPERCASE now is %c\n", UPPER); и еще раз после printf("The lowercase now is %c\n", LOWER);. Большая часть программы заканчивается на getch(), поэтому мы думаем, что getch() используется для отображения вывода... но это неправильно. Он используется для получения одного символа из консоли. ваш правильный код должен быть таким:

#include <stdio.h>
#include <stdlib.h>
int main()
{
char UPPER, LOWER;
printf("Enter UPPERCASE\n");
UPPER = getchar();
if (UPPER >= 65 && UPPER <= 90)

{
UPPER = UPPER + 32;
printf("The UPPERCASE now is %c\n", UPPER);

}
getchar();
printf("Enter lowercase\n");
LOWER = getchar();
if (LOWER >= 97 && LOWER <= 122)

{

LOWER = LOWER - 32;
printf("The lowercase now is %c\n", LOWER);

}
getchar();
}
person GorvGoyl    schedule 08.07.2014
comment
Теперь мне нужно только поместить весь код в цикл while, пока я не войду в EOF. Какие-либо предложения? - person user2309261; 08.07.2014
comment
Нет проблем, но я застрял с EOF, не знаю, как правильно его использовать в цикле while - person user2309261; 08.07.2014
comment
я не понимаю ваш запрос, вы хотите напечатать оба значения в конце? - person GorvGoyl; 08.07.2014
comment
Я имел в виду следующее: мне нужно использовать EOF в цикле while, но EOF не работает. - person user2309261; 08.07.2014