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段在不同的地方分配数字。
这意味着我必须在扫描前两个值后读取并使用 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
说明符中删除 all 空格,不需要它们,只是弄乱你的输入,尤其是最后的那些。
请注意,为了获得更健壮的代码,您应该验证 scanf
、 的 return 值,即 如果它匹配要读取的值的数量,并防止无效输入即非数字输入。
这是一个很好的例子:
理想情况下,如果符合您的规范,您将使用 fgets
获取输入并使用 sscanf
或 strtol
进行解析。
我正在尝试通过以下格式输入数字:
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
说明符中删除 all 空格,不需要它们,只是弄乱你的输入,尤其是最后的那些。
请注意,为了获得更健壮的代码,您应该验证 scanf
、 的 return 值,即 如果它匹配要读取的值的数量,并防止无效输入即非数字输入。
这是一个很好的例子:
理想情况下,如果符合您的规范,您将使用 fgets
获取输入并使用 sscanf
或 strtol
进行解析。