#include <stdio.h>
main()
{
int n,i;
FILE *fptr;
fptr=fopen("f3.txt","w");
if(fptr==NULL)
{
printf("Error!");
exit(1);
}
printf("Enter n: ");
for(i=0;i<=2;i++)
{
scanf("%d \n",&n);
fprintf(fptr,"%d ",n);
}
fclose(fptr);
return 0;
}
编辑: *在上面的程序中,我输入了 3 个值,但为什么要求输入 4 个值?虽然只写了3次,但要求的值却是4次。你能说出原因吗?以及如何才能使其获取我正在输入的值的确切数量。?* 提前致谢..
所以我们知道这是由于循环中 %d 旁边的空格造成的。有人可以详细解释一下回车符吗,我搜索过但无法理解到底是什么。
最佳答案
您输入的不是 4 个值,而是 3 个值。for
语句遍历 0、1 和 2。如果看起来它要求您输入 4 个值,则可能是因为您使用的格式字符串所致scanf()
。只需使用 "%d"
,不带尾随空格和 \n
。
此外,我建议您在 scanf()
之前重复 printf ("Enter n: ");
,而不仅仅是在程序开头?这样,您将很快意识到程序何时要求您提供数据,或者何时 scanf()
刚刚陷入等待某些尾随数据(例如回车符)以接受先前的数据.
如果您按照我告诉您的那样更改了 printf
并且不更改 scanf()
中的格式字符串,您将意识到您的程序需要第一个数字,然后要求回车(您认为这里要求您输入一个数字,然后输入一个,您的“第二个”数字),然后要求第二个数字(您的第三个数字,但是这个 scanf()
将接受您之前输入的第二个数字),然后是第三个数字(第四个数字是您的,但此 scanf()
将接受之前输入的第三个数字)。这是用户的 4 个输入,这就是让您感到困惑的地方。
为了尝试解释您最初拥有的 scanf() 发生的情况,我根据您的程序编写了一个程序,但添加了一些内容:
#include <stdio.h>
int main()
{
int n,i,c;
for(i=0;i<=2;i++)
{
printf (" scanf #%d (%%d) \n", i+1);
scanf("%d",&n);
printf (" Read: %d\n",n);
c = getchar();
printf (" Last character in input buffer: %.2X\n", c);
printf (" scanf #%d (space and \\n) \n", i+1);
scanf(" \n"); /* or \t or just the space, or just \n */
c = getchar();
printf (" Last character in input buffer: %.2X\n", c);
ungetc (c, stdin);
}
return 0;
}
每当程序静止时,用户输入一个数字:1,2,3,4,...序列getchar/ungetch
查看输入缓冲区以查看最先发生的事情是什么接下来 scanf()
将会找到。我还将您的 scanf()
分为两个调用:第一个使用 %d
,第二个使用格式字符串的其余部分(空格和/或 \n
)。请注意,\n 被视为空格。事实上,两者都是所谓的空白字符的一部分,因此它们中的任何一个的行为都是相同的,并且多个空白的行为就像只有一个空白)
这就是发生的情况(左边的数字是我从键盘输入的数字):
scanf #1 (%d)
1
Read: 1
Last character in input buffer: 0A
scanf #1 (space and \n)
2
Last character in input buffer: 32
scanf #2 (%d)
Read: 2
Last character in input buffer: 0A
scanf #2 (space and \n)
3
Last character in input buffer: 33
scanf #3 (%d)
Read: 3
Last character in input buffer: 0A
scanf #3 (space and \n)
4
Last character in input buffer: 34
END OF PROGRAM
将此输出与此输出进行比较:
scanf #1 (%d)
1 2 3 4 <-- I enter 4 numbers at the first prompt, instead of one at a time
Read: 1
Last character in input buffer: 20
scanf #1 (space and \n)
Last character in input buffer: 32
scanf #2 (%d)
Read: 2
Last character in input buffer: 20
scanf #2 (space and \n)
Last character in input buffer: 33
scanf #3 (%d)
Read: 3
Last character in input buffer: 20
scanf #3 (space and \n)
Last character in input buffer: 34
END OF PROGRAM
关于c++ - 程序不询问预期值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20760914/