Как я могу остановить сканирование данных на клавиатуре при нажатии CTRL + D - PullRequest
0 голосов
/ 20 апреля 2020

Я новичок ie программист. У меня есть задание, и у меня есть некоторые проблемы по этому поводу. Прежде всего, мое назначение:

"Предположим, что вы сканируете вводимый текст в Turki sh символ за символом с клавиатуры, который вы можете рассматривать как устройство ввода по умолчанию, до появления CTRL-D '. Вы должны пропустить знаки препинания, а также пустой символ. Ваша программа будет отображать частоты букв и цифр, когда процесс сканирования завершен. Вам нужно обсудить структуру данных, а также решение для блок-схемы и передать их с вашим кодом. "

Я провел некоторое исследование и обнаружил, что команда CTRL + D соответствует EOF. Я написал свой код, но он не работает так, как я хочу. Вот мой код.

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

int main()
{
    setlocale(LC_ALL, "Turkish");    

    char message[1000] = { ' ' };
    char ch;
    int i = 0;

    printf("Please enter your message: ");

    while (ch = getchar() != EOF )
    {
        message[i] = ch;
        i++;
    }

    for (i; i >= 0; i--)
    {
        printf("%c", message[i]);
    }

    printf("\n\n");

    system("PAUSE");
    return 0;
}

Когда я его запускаю, я что-то пишу и нажимаю Ctrl + D, но, как видно на картинке, ничего не происходит. Он просто пишет ^ D. Спасибо за вашу помощь.

Picture 1

1 Ответ

1 голос
/ 20 апреля 2020

Ctrl-D соответствует целочисленному буквальному символу '\4' в C, потому что A = 1, B = 2, C = 3, D = 4.

Ваш скриншот показывает, что вы программируете на Windows, поэтому то, что вы читаете о том, что Ctrl-D , такой же, как EOF, не применимо (это Unix / Linux / Ma c).

Чтобы исправить вещи, вам нужно прочитать до '\4' (или просто 4; они эквивалентны):

while ((ch = getchar()) != '\4')
{
    message[i] = ch;
    i++;
}

Обратите внимание, что вам все равно нужно будет нажать Enter или Возвращает ключ для строки текста, которая будет принята. Это означает, что вы можете набрать hello world^D what? i can still type? перед нажатием Введите , чтобы отправить текст в вашу программу. Однако ваша программа прекратит чтение с символа ^D, в результате чего будет напечатано сообщение hello world .

В будущем вы можете использовать что-то вроде printf("%d %c\n", message[i], message[i]); в al oop чтобы распечатать список значений байтов, которые вы прочитали.

...