Вопрос по c – Чтение \ r (возврат каретки) vs \ n (перевод строки) из консоли с помощью getc?

20

Я пишу функцию, которая в основном ждет, когда пользователь нажмет кнопку "ввести". а потом что-то делает. Ниже показано, что работает при тестировании.

<code>#include <stdio.h>

int main()
{
        int x = getc(stdin);
        if (x == '\n') {
                printf("carriage return");
                printf("\n");
        }
        else {
                printf("missed it");
                printf("\n");
        }
}
</code>

Вопрос, который у меня возник, и то, что я сначала попытался сделать:if (x == '\r') но во время тестирования программа не поймала меня на том, что я нажал клавишу ввода.'\n' кажется, соответствует мне, нажав клавишу ввода с консоли. Может кто-нибудь объяснить разницу? Также для проверки пишем какif... == "\n" будет означать символьную строку литерала? то есть пользователь буквально должен был бы войти"\n" с консоли, правильно?

(Надеюсь, вы не возражаете против изменений в названии, они сделаны для того, чтобы сделать его более доступным для поиска.) user166390
C применяет экранирование как к одинарным, так и к двойным кавычкам, поэтому & quot; \ n & quot; это строка длиной в два символа, во-первых, ASCII-код 10 (\ n сам по себе), а во-вторых - ASCII NUL (нулевой терминатор). toriningen
Если ваш стандартный ввод открыт в текстовом режиме, то ваше приложение будетalways увидеть\n для новой строки, что угодно\n означает в вашем наборе символов выполнения, и тем не менее платформа сериализует переводы строки. Kerrek SB
Связанные с:stackoverflow.com/questions/1355095/… Mysticial
И вы не можете проверить на равенство строк в C, используя ==, вы должны использоватьstrcmp или похожие.char *s1, *s2; if (s1 == s2) {...} просто проверим, еслиs1 а такжеs2 указывают на одну и ту же область памяти, независимо от фактического содержимого памяти. toriningen

Ваш Ответ

0   ответов

Похожие вопросы