Вопрос
Представьте себе следующее:
вы читаете в строке с 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);