C编程:扫描后输入缓冲区被无意清除



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

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说明符中删除所有空格,这些空格是不需要的,只会打乱输入,尤其是最后的输入。

请注意,对于更健壮的代码,您应该验证scanf的返回值,,即,如果它改变了要读取的值的数量,并防止无效输入,如非数字输入。

下面是一个很好的例子:https://stackoverflow.com/a/40552127/6865932

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

相关内容

  • 没有找到相关文章

最新更新