C 编程:输入缓冲区在 scanf 后无意中被清除?

C Programming: input buffer unintentionally cleared after scanf?

我正在尝试通过以下格式输入数字:

c1 c2 [c1 amount of integers separated by white space] [c2 amount of integers separated by white space]

并根据是在c1段还是c2段在不同的地方分配数字。

这意味着我必须在扫描前两个值后读取并使用 c1c2 作为 for 循环中的变量。

这是我的代码:

scanf("%d %d ", &np, &nm); // np and nm are c1 and c2

for (j = 0; j < np; j++)
{
    scanf("%d ", &tempvalue);
    // assign tempvalue to somewhere via a function
}
for (j = 0; j < nm; j++)
{
    scanf("%d ", &tempvalue);
    // assign tempvalue elsewhere via a function
}

但无论出于何种原因,使用 print 语句进行调试显示在 c1 的第一次赋值后,程序再次请求输入(输入缓冲区已清除??)知道为什么这可能是案例?

%d 说明符自动丢弃输入数字之间的空格,从 scanf 说明符中删除 all 空格,不需要它们,只是弄乱你的输入,尤其是最后的那些。

请注意,为了获得更健壮的代码,您应该验证 scanf 的 return 值,即 如果它匹配要读取的值的数量,并防止无效输入非数字输入。

这是一个很好的例子:

理想情况下,如果符合您的规范,您将使用 fgets 获取输入并使用 sscanfstrtol 进行解析。