Как сканировать, если в той же позиции ввода может быть char или int - PullRequest
0 голосов
/ 28 ноября 2018

Например, если у меня есть вход, который выглядит следующим образом: 10 3 128, но также есть второй вход, который выглядит следующим образом: 16 2 F

Как я могу сканировать эти значения?Я попытался прочитать его как строку, а затем попытаться преобразовать его в целое число или оставить его как символ в случае необходимости.

fscanf(in, "%d %d %c or %d, from, to, numorhex);

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

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете сделать что-то подобное:

int main(void)
{
    char *line[] = {"10 3 128", "16 2 F", NULL};
    int  nb1;
    int  nb2;
    int  nb3;
    char letter;
    char end;


    for (size_t i = 0; line[i]; ++i) {

        if (end = EOF, sscanf(line[i], "%d %d %d%c", &nb1, &nb2, &nb3, &end) == 3 && end == EOF) {
            printf("number number number : %d %d %d\n", nb1, nb2, nb3);
        } else if (end = EOF, sscanf(line[i], "%d %d %c%c", &nb1, &nb2, &letter, &end) == 3 && end == EOF) {
            printf("number number letter : %d %d %c\n", nb1, nb2, letter);
        } else {
            printf("format line not supported : %s\n", line[i]);
        }
    }

    return (0);
}

Будьте очень осторожны, так как le "% c" примет любой символ, например, '1', поэтому, возможно, вы захотите ограничить значение, полученное в%c чем-то, что вы считаете письмом.

0 голосов
/ 28 ноября 2018

Во-первых, вы можете хранить все, что вы сканировали в int, а также как char.Когда вы хотите распечатать его после сканирования.Вы можете сделать это из обоих типов.

...