Вопрос

Представьте себе следующее:

вы читаете в строке с scanf() но вам нужно всего несколько точек данных в строке.

Есть ли простой способ удалить постороннюю информацию, не теряя возможности проверить, есть ли соответствующие данные, чтобы вы все еще могли легко отклонять искаженные строки?

пример:

const char* store = "Get: 15 beer 30 coke\n";
const char* dealer= "Get: 8 heroine 5 coke\n";
const char* scream= "Get: f* beer 10 coke\n";

Я хочу принять первую порцию, но забыть о пиве, потому что пиво - это гадость.Я хочу отклонить вторую и третью строки, потому что они явно не являются подходящими списками для 7/11;

Итак, я думал о следующей конструкции:

char* bId = new char[16];
char* cId = new char[16];
int cokes;
sscanf([string here], "Get: %d %s %d %s\n", [don't care], bId, &cokes, cId);

Таким образом, я бы продолжал проверять формат, но что бы я поставил для [don't care], чтобы компилятор не ныл?

Конечно, я мог бы просто создать переменную, которую позже не буду использовать, но суть данного вопроса не в этом.Кроме того, раздельная проверка левой и правой сторон - очевидное решение, которое я здесь не ищу.

Итак, есть ли способ не заботиться о том, но все же проверять тип фрагмента строки в scanf и друзьях?

Это было полезно?

Решение

Используйте * в качестве символа подавления присваивания после %

Пример:

  sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top