获取一个char和一个整数作为输入,或者仅获取一个char作为输入

时间:2019-03-09 08:15:20

标签: c user-interface user-input

正在开发一个具有类似UI界面的C背包程序,我到达了一个点,我需要用户能够输入用于命令的字符,而所有这些仅需要一个简单的命令字符输入非常简单,在背包中添加或删除数字的情况下,我需要能够允许用户同时输入charint。虽然我知道可以使用来自用户的两个单独的输入来完成此操作,但我想知道如何在同一行中完成此操作而无需用户输入两个单独的输入。例如,如果用户键入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 个答案:

答案 0 :(得分:1)

对于用户输入问题,有许多解决方案。我建议您一次使用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;
}