Игнорирование ввода пользователя при тестировании с единицей - PullRequest
1 голос
/ 23 апреля 2019

У меня есть программа-чатбот, которая использует функцию под названием userInput() для получения ввода от пользователя.

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

Любая помощь в добавлении тестовых фраз, которую пользователь сказал бы, не останавливая программу тестирования.

char *userInput()
{
    char *str = NULL;
    int ch;
    size_t size = 0, len = 0;

    while ((ch=getchar()) != EOF && ch != '\n') {
        if (len + 1 >= size)
        {
            size = size * 2 + 1;
            str = realloc(str, sizeof(char)*size);
        }
        str[len++] = ch;
    }

    if (str != NULL) {
        str[len] = '\0';
    }

    return str;
}

1 Ответ

0 голосов
/ 24 апреля 2019

Я столкнулся с идеей anonmess, что вы можете вводить текст от пользователя, используя входной файл. Я использовал входной файл со следующими строками:

testing input
testing input 2

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

#include <stdio.h>
#include <string.h>

int processInputFile(char *filename)
{
    FILE *ifp;
    char buffer[1024];
    char *p;

    if ((ifp = fopen(filename, "r")) == NULL)
    {
        fprintf(stderr, "Failed to open \"%s \" in processInputFile.\n", filename);
        return -1;
    }

    while ((fgets(buffer, sizeof(buffer), ifp)) != NULL)
    {
        // remove newline character
        p = strchr(buffer, '\n');

        if (p != NULL)
            *p = '\0';

        // We can also remove the newline character by getting
        // its length and chomping the last character

        // int length = strlen(buffer);
        // buffer[length - 1] = '\0';

        printf("%s\n", buffer);
    }

    fclose(ifp);

}

int main(int argc, char **argv)
{
    if (argc < 2)
    {
        printf("Proper syntax: ./a.out <n>\n");
        return -1;
    }

    processInputFile(argv[1]);

    return 0;
}

Файл прочитан, а строки напечатаны. Вы можете передать строку другой функции в цикле while.

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