C - Есть ли способ разграничить единицу, десятки или сотни при чтении числа в файле? - PullRequest
0 голосов
/ 13 апреля 2019

Моя программа должна прочитать i файл, который указывает, нужно ли ставить номер в очередь, удалить номер из очереди или завершить программу.

У меня есть .txt файл, который выглядит так:

E    10
E    2
E    300
D
D
D
E    40
E    50
T

Итак, E скажем "эй, у вас есть что-то в очереди" (в первой строке 10), D сказать "эй, вычеркни парня из очереди", и T говорят "эй, удалите всех, освободите память, вот и все"

Я пытаюсь использовать getc, но он получает каждый символ, вывод:

E

1
0

И с fgets у меня есть очередь, это не то, что я хочу.

То, что я хочу, - это чтобы программа понимала разницу между 10 (десятичным), 2 (единичным), 300 (сотнями). Как я могу получить E, чем перепрыгнуть пробел, затем получить 10 (а не 1, а затем 0)? Есть ли функция для этого?

Obs: файл с входными данными не может быть изменен, это должно быть так.

1 Ответ

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

Вы можете сделать что-то вроде этого:

char c;
while (fscanf(fp, " %c", &c) == 1) {
    switch (c) {
        case 'E': {
            int n;
            if (fscanf(fp, "%d", &n) != 1) {
                input error; handle it
            }
            enqueue(n);
            break;
        }
        case 'D':
            dequeue();
            break;
        case 'T':
            destroy_queue();
            break;
        default:
            unknown command; handle error
    }
}
if (ferror(fp)) {
    input failed; handle error
}

Обратите внимание, что технически это будет анализировать расширенный набор файлов описанного вами формата. В частности, он не заботится о границах строк или форматировании:

E1D

  D    E

2  E  3E
    4   D
     D

вполне приемлемо и рассматривается так же, как

E   1
D
D
E   2
E   3
E   4
D
D

fscanf используется для всего ввода. " %c" пропускает любые пробелы, которые могут присутствовать, а затем читает один символ. В частности, после первой строки всегда будет пробел, который мы должны пропустить: \n в конце предыдущей строки.

"%d" неявно пропускает любые пробелы и читает целое число (в десятичном формате).

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