«Вход» в качестве ввода? - PullRequest
       35

«Вход» в качестве ввода?

0 голосов
/ 19 ноября 2009

Вот мой код! (Извините за мой плохой английский)

#include<stdio.h>

int convert(char ch);

int main(void)
{
     char ch=0;

     while(ch != 'q')
     {
         ch=getchar();
         ch=convert(ch);
         if(ch == -1)
            printf("wrong input");
         else 
            putchar(ch);
            putchar('\n');
     }

     return 0;
}

int convert(char ch)
{
    if(ch>='A' && ch<='Z')
        ch+=32;
    else if(ch>='a' && ch<='z')
        ch-=32;
    else
        return -1;
}

И этот код предназначен для замены A на a, z на Z преобразовать маленькое в заглавную букву или наоборот.

но когда я закончил, я обнаружил что-то странное, потому что всякий раз, когда ставил в программу символ,

он всегда возвращает ожидаемый результат и другой "неправильный ввод". и я ничего не добавил к своему стандартному вводу, кроме символа и Enter.

Итак, вот мой вопрос.

Функция getchar () или что-то подобное, например, fgetc, fgets получает 'enter' в качестве символа?

Ответы [ 5 ]

1 голос
/ 19 ноября 2009

Вот пример примера кода , чтобы помочь вам понять getchar подробнее.

Кроме того, я думаю, вам нужно заключить в скобки фразу else.

Изменить это:

else 
    putchar(ch);
    putchar('\n');

к этому:

else
{
    putchar(ch);
    putchar('\n');
}

В C / C ++ только первая строка кода будет выполняться в блоке if/else, если вы не заключите в скобки { и }, чтобы указать, что несколько строк следует рассматривать как один блок.

1 голос
/ 19 ноября 2009

Функция getchar () или какая-то другая как fgetc, fgets получает 'enter' как характер?

Да, «Enter» - это символ 10. Вы можете увидеть это, добавив одну дополнительную строку:

ch=getchar();
printf("Received: %d\n", ch);
ch=convert(ch);

а Получено: 97

Получено: 98

Получено: 99

Получено: 10

0 голосов
/ 19 ноября 2009

Полагаю, на этот вопрос уже был дан ответ, но мне кажется, что у конверта есть проблема, о которой никто не упоминал. Символ передается по значению, поэтому сложение или вычитание 32 не влияет на ch. Кроме того, единственное значение, явно возвращаемое функцией convert, равно -1. Я не понимаю, как этот код может работать как задумано.

0 голосов
/ 19 ноября 2009

Да, getchar() получает 'enter' так же, как и любой другой введенный вами символ.

Вы можете проверить 'enter' с помощью

if (ch == '\n') { /* ... */ }

Также обратите внимание, что символы, отличные от «ввода», принимаются только после , когда вы вводите «ввод». Если вы наберете «q» и подождите 5 минут, программа будет простаивать в течение этих 5 минут и завершит работу только после того, как вы нажмете «enter».

Это дизайн, лежащий в основе ввода с линейной буферизацией.

0 голосов
/ 19 ноября 2009

Да, будет. Новая строка является частью строки, поэтому она будет учитываться как часть ввода.

Возможно, вы захотите использовать символ новой строки в качестве символа для выхода из программы, если только вам не нужно обрабатывать несколько строк.

Редактировать: Вы также можете использовать do {} while loop вместо традиционного цикла while

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...