Есть ли в C какая-либо функция, чтобы заменить getch () для моей данной программы, поскольку это нестандартная функция? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу найти функцию или альтернативу, которая могла бы заменить нестандартную функцию getch () языка C. Я хочу помочь, если какая-либо функция, которая может заменить функцию getch () из кода ниже или соответствующую альтернативу.

Я делаю это, так как мой колледж попросил меня не использовать заголовочный файл conio.h в моих C программах.

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

int main()
{
    int i=0, j=0, memAlloc=1;
    char *p, *q, a;
    p=(char *)calloc(1, sizeof(char));
    while(1)
    {
        a=getch();                   //getch() function 
        if(a!='\b'&&a!='\r')
        {
            p[i]=a;
            ++i;
            printf("%c", a);
            memAlloc++;
            p=realloc(p, memAlloc*sizeof(char));
        }
        if(a=='\b'&&i>=1)
        {
            printf("\b \b");
            --i;
        }
        if(a=='\r')
        {
            p[i]='\0';
            break;
        }
    }
    printf("\n");
    for (i=0; p[i]!='\0'; i++)
        printf("%c", p[i]);

    //Storing a string of only alphabets into a new dynamic array   
    q=(char *)calloc(1, sizeof(char));
    memAlloc=1;
    for (i=0; p[i]!='\0'; i++)
    {
        if (isalpha(p[I]))               //Checking for alphabet
            if(isupper(p[i]))
            {
                q[j]=p[i]+32;            //If uppercase alphabet convert it to lowercase
                memAlloc++;
                q=realloc(q, memAlloc*sizeof(char));
                j++;
            }
            else
            {
                q[j]=p[i];
                memAlloc++;
                q=realloc(q, memAlloc*sizeof(char));
                j++;    
            }           
    }
    q[j]='\0';                                         //Adding a null character to the end of the string
    free(p);
    printf("\n");
    for (i=0; q[i]!='\0'; i++)
        printf("%c", q[i]);

}

Вот объяснение программы.

Программа примет строку ввода пользователя неизвестного размера и сохранит его в массив Dynami c. Пользователь будет продолжать вводить символы в одной строке до тех пор, пока не нажмет клавишу ввода, после чего вся строка будет сохранена в динамическом массиве c. Затем программа удаляет все символы, кроме алфавитов и преобразует прописные буквы в строчные, а затем сохраняет обновленную строку в другой динамический массив c.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Если вы можете жить с этим, функция будет ждать, пока не найдет новую строку или другой символ пробела в stdin - пользователь должен ввести больше символов, таких как символ новой строки, сделанный нажатием, в Return / Enter - (в отличие от функции getch(), которая не не ожидает дальнейшего ввода) вы можете использовать scanf() или getchar() (оба заголовка stdio.h), чтобы получить один символ из stdin:

a = getchar();

или

scanf("%c",&a);

Обратите внимание, что в случае getchar(), a должен иметь тип int вместо типа char, чтобы уловить потенциал EOF, который возвращается с ошибкой.


Если вы ищете стандартную библиотечную функцию, которая не ожидает другого символа в stdin (если только он не обнаружил EOF ) как getch(), простой ответ:

Там никого нет. Есть только платформо-зависимые решения, такие как getch() для Windows и DOS, но не общий стандарт для всех сред.

0 голосов
/ 09 апреля 2020

попробуйте scanf(" %c",&a);

, также вы можете использовать getchar(), но обратите внимание, что обе эти функции (scanf и getchar()) оставят \n в буфере и, таким образом, в следующем введите l oop, они примут это как ввод, что означает, что вы можете использовать два getchar() или добавить пробел в scanf, как указано выше.

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

...