程序不询问预期的值数
Program not asking expected number of values
#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个值?虽然它只写了三次,但它要求值 4 次。你能说出d原因吗?以及如何让它取我正在输入的确切数量的值。?*提前感谢..
所以这是由于循环中 %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: %dn",n);
c = getchar();
printf (" Last character in input buffer: %.2Xn", 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: %.2Xn", c);
ungetc (c, stdin);
}
return 0;
}
每次程序静止时,用户都会输入一个数字:1,2,3,4,...序列getchar/ungetch
查看输入缓冲区,以查看下一个scanf()
将发现的第一件事是什么。我还将您的scanf()
拆分为两个调用:第一个使用%d
,第二个使用格式字符串的其余部分(空格和/或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
将 for 循环更改为,然后您可以输入 4 个值
for(i=0;i<=3;i++)
{
scanf("%d n",&n);
fprintf(fptr,"%d ",n);
}
试试这个
#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<=3;i++)
{
scanf("%d n",&n);
fprintf(fptr,"%d ",n);
}
fclose(fptr);
return 0;
}
您的代码仅采用 3 个值,而不是 4 个值。
for(i=0;i<=2;i++)
上面的循环运行 0、1 和 2,即 3 次。
for(i=0;i<=2;i++)
只循环 3 次,将其更改为for(i=0;i<4;i++)
并回答您的编辑::将scanf("%d n",&n);
更改为scanf("%d",&n);
(%d
后发现空间差异)。
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址