Получить как символ и целое число в качестве ввода ИЛИ просто символ в качестве ввода - PullRequest
1 голос
/ 09 марта 2019

Работая над программой на ранце C, которая будет иметь интерфейс, похожий на пользовательский интерфейс, я пришел к тому моменту, когда мне нужно, чтобы пользователь мог вводить символы для команд, а все те, которые требуют только простого ввод символов довольно прост. Мне нужно, чтобы пользователь мог одновременно вводить char и int в случае добавления или удаления номера из рюкзака. Хотя я знаю, что это можно сделать с помощью двух отдельных входов от пользователя, мне интересно, как это можно сделать в одной строке, не требуя от пользователя ввода двух отдельных входов. Например, если пользователь введет a 7, он добавит 7 к ранцу.

КОД

#include <stdio.h>
#include "knapsack.c"
#include <stdlib.h>
#include <string.h>

int main()
{
    listitemptr k2 = NULL;
    char input[100];
    int *returnval;
    while(*input != 'q'){
        printf("> ");
        fgets(input, 100, stdin);

        if(*input == 'p'){
            KnapsackPrint(&k2);
        }
        else if(*input == 'a'){
            printf("test\n");
            sscanf(input, "%d", returnval);
            printf("%d\n", *returnval);

        }
        else if(*input == 'r'){

        }
        else if(*input == 'l'){

        }
        else if(*input == 's'){

        }
    }




}

1 Ответ

1 голос
/ 09 марта 2019

Существует множество решений для вашей проблемы пользовательского ввода.Я бы посоветовал вам читать по одной строке с fgets() и анализировать с sscanf():

#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "knapsack.c"

int main() {
    char input[100];
    listitemptr k2 = NULL;
    int i, returnval = 0;
    char command;

    for (;;) {
        printf("> ");
        if (!fgets(input, sizeof input, stdin))
            break;
        i = strspn(input, " \t\n");  /* skip blanks */
        command = input[i++];
        if (command == '#' || command == '\0') {
            /* ignore comment lines and blank lines */
            continue;
        }
        if (command == 'q' && input[i] == '\n')
            break;
        }
        if (command == 'p') {
            KnapsackPrint(&k2);
            continue;
        }
        if (command == 'a') {
            int item;
            if (sscanf(input + i, "%i", &item) != 1) {
                printf("invalid input\n");
                continue;
            }
            KnapsackAdd(&k2, item);
            continue;
        }
        // add more commands     
        printf("unknown command: %c\n", command);
    }
    return returnval;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...