不在scanf中的意义是什么?

9

想象一下以下情况:

您使用 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);

我可以保留格式检查,但是对于不关心的内容,我应该填什么才能避免编译器报错?

当然,我可以创建一个后面用不到的变量,但这并不是这个问题的重点。同时分别检查左边和右边也是一个显而易见的解决方案,但这里我不想使用这种方法。

那么,在scanf和相关函数中,有没有一种方式可以不关心字符串的某些部分,但仍然检查其类型呢?

1个回答

21
使用*作为%后面的赋值抑制字符。
例如:
  sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId);

4
我知道这要么很明显,要么就是不可能的。 - NomeN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接