我正试图通过以下格式输入数字:
c1 c2 [c1 amount of integers separated by white space] [c2 amount of integers separated by white space]
根据数字是在c1段还是c2段,将数字分配到不同的位置。
这意味着在扫描前两个值之后,我必须读取并使用c1
和c2
作为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
来获取输入,并使用sscanf
或strtol
进行解析。