如果你想丢弃一定数量的字符(我的回答是 4 个),你可以这样做:
scanf("%*4s %d %d", &first, &last);
但前面的那个丢弃了它看到的每一个字符,它并没有停止并消耗你的 int 的数字。
在这种情况下,我展示的内容将消耗 4 个字符,然后读取 int-s。
示例用法:
>54321 12
它将分别接收first 和last 1 和12。并在此处检查 scanf 的返回值 - 如果调用成功,它将是 2。扩展您将执行此操作的想法
scanf("%*32[^ \n] %d %d", &first, &last);
如果前 32 个字符不是来自扫描集 [^ \n],您将在此处跳过它们,然后使用 %d 格式说明符输入其余内容以获取输入整数。
如果你想跳过第一个空格之前的任何字符,那么你可以这样做
scanf("%*[^ \n] %d %d", &first, &last);
这和前面的完全一样,唯一的区别是这里没有像以前那样限制32个字符。
在所有这些情况下都必须检查 scanf 的返回值 - 需要该级别的错误检查。
最好是使用fgets 来更好地控制输入。取整行,然后使用strtol 等解析它。
我将按原样添加评论(Jonathan Leffler):
请注意,%*4s 将跳过零个或多个空格字符,然后最多读取4 非空格字符,并在下一个空格或4 字符已读取时停止。下面的空格会跳过零个或多个空格。 %d 也会跳过零个或多个空格字符,然后读取一个整数(或失败)。 (重复第二个空格和%d。)如果您想无条件地跳过4 字符,请使用%*4c,可能在% 之前有一个空格,因为%c 不会跳过空格。 (" %*4c")。
David C. Rankin 提到的另一个选择是使用提到要忽略数字的扫描集。 scanf("%*[^0-9]%d %d",&first,&last) 将跳过所有字符,直到找到一个数字。