从用户帮助中读取特定的字符串输入(在C中)

时间:2019-04-10 11:38:31

标签: c

基本上,我希望用户输入以下内容:

h X,Y(例如h 5,20)[正是这种格式,h然后是空格,然后是整数,然后是逗号,然后是整数)

到目前为止,我已经创建了这段代码:


    char input[5];
    scanf("%[^\n]%*c", input);
    while ((input[0] != 'h' && input[0] != 'H') || (input[1] != ' ') || (isdigit(input[2] == 0) || (input[3] != ',') || (isdigit(input[4]) == 0)
        scanf("%[^\n]%*c", input);

如果我现在想获取数字,我就这样做:输入[2]-'0'并获取它。

现在的问题是,如果数字是两位数,我不知道该怎么办。就像,如果用户输入h 10,10

我如何获得价值?另外,除了将数组从input [5]更改为input [7]之外,我还需要做什么?

1 个答案:

答案 0 :(得分:0)

%n可用于计算已处理的字符。这样可以检测输入中的空格数或缺少空格。

#include <stdio.h>

int main( void) {
    char line[100] = "";
    char h = 0;
    int first = 0;
    int second = 0;
    int firstspace = 0;
    int aftercomma = 0;
    int beforeint = 0;

    while ( fgets ( line, sizeof line, stdin)) {
        if ( 3 == sscanf ( line, "%c %n%d,%n %n%d"
        , &h, &firstspace, &first, &aftercomma, &beforeint, &second)) {
            if ( h != 'h' && h != 'H') {
                fprintf ( stderr, "first character must be h or H\n");
                continue;
            }
            if ( firstspace != 2) {
                fprintf ( stderr, "one space must follow h/H\n");
                continue;
            }
            if ( beforeint - aftercomma != 0) {
                fprintf ( stderr, "invalid space after comma\n");
                continue;
            }
            printf ( "input success:\t%c %d %d\n", h, first, second);
            break;
        }
        else {
            fprintf ( stderr, "format: h/H int,int\n");
        }
    }

    return 0;
}