为何程序加了getch() 结果还是一闪而过

qq455532838 2008-11-06 04:08:15
本人是C的初学者 为什么下面这个程序加了getch(); 运行结果还是一闪而过?希望各位高手指点
#include <stdio.h>
#include <conio.h>
long factorial(int a)
{
if(a>1)
return (a*factorial(a--));
else if(a==0||a==1) return 1;
else return -1;
}
main()
{
int n;
printf("Please input a number:\n");
scanf("%d",&n);
printf("%d!=%ld",n,factorial(n));
getch();
}
...全文
304 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq455532838 2008-11-06
  • 打赏
  • 举报
回复
感谢各位 受教了,按5L的说的改正后就能显示结果了,错误处在了a--上,如果不把a--改成a-1的话 貌似换成system("pause")也是一闪而过。如果按照7L说的把a--改成--a的话 能显示结果 但是结果是错误的,这个时候求出来的是(a-1)!。
最后再次谢谢各位。
「已注销」 2008-11-06
  • 打赏
  • 举报
回复
我用getchar();每次都能定住,为啥呢?
canican 2008-11-06
  • 打赏
  • 举报
回复
学习了
Tobysin 2008-11-06
  • 打赏
  • 举报
回复
ding 3
cyj626 2008-11-06
  • 打赏
  • 举报
回复
system("pause")
DouBreak 2008-11-06
  • 打赏
  • 举报
回复
支持
once_and_again 2008-11-06
  • 打赏
  • 举报
回复
i/o
heaven_wsh 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lann64 的回复:]
scanf("%d",&n); 这个读数据的时候把回车键留在输入缓冲区了,你的getch实际上是把上一次的回车读走了,所以程序不会暂停。再加一个就可以了。
不过一般用system("pause")
[/Quote]

三楼正解,支持。
太乙 2008-11-06
  • 打赏
  • 举报
回复
#include <stdio.h> 
#include <conio.h>
long factorial(int a)
{
if(a>1)
return (a*factorial(--a));
else if(a==0||a==1) return 1;
else return -1;
}
main()
{
int n;
printf("Please input a number:\n");
scanf("%d",&n);
printf("%d!=%ld",n,factorial(n));
getch();
}
iceman19860106 2008-11-06
  • 打赏
  • 举报
回复
原因是a--每次都是先把值拷贝给形参,再做自减运算;
假设你输入5,你调试后会发现,每次的函数调用传过去的都是5,并不会自减
iceman19860106 2008-11-06
  • 打赏
  • 举报
回复
不是scanf的问题,因为getch()并不是取标准输入流的数据,所以scanf不会对getch()产生影响


return (a*factorial(a--));
改为
return (a*factorial(a-1));
程序就能正确运行,并且能停顿。

victormaomao 2008-11-06
  • 打赏
  • 举报
回复
或者在scanf("%d",&n);之后加上:fflush(stdin);
lann64 2008-11-06
  • 打赏
  • 举报
回复
scanf("%d",&n); 这个读数据的时候把回车键留在输入缓冲区了,你的getch实际上是把上一次的回车读走了,所以程序不会暂停。再加一个就可以了。
不过一般用system("pause")
brookmill 2008-11-06
  • 打赏
  • 举报
回复
试试再加一个getch();
或者把getch()换成system("pause"); (需要#include <stdlib.h>)

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧