因为前面输入数字时,最后总要按下回车键,这就输入了一个回车符,而后面的getchar()会读取这个字符,而不等待从键盘输入(因为缓冲区不为空),修改如下:
创新互联公司网站建设公司,提供网站建设、成都做网站,网页设计,建网站,PHP网站建设等专业做网站服务;可快速的进行网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,是专业的做网站团队,希望更多企业前来合作!
#include stdio.h
#include stdlib.h
int main()
{
int data[7000]={1,1,0},num,digit=1,i,j,k;
FILE *fp;
char fname[50];
printf("\t阶乘计算器\n\t请输入:");
scanf("%d",num);
for(i=1;i=num;i++)
{
if(i%20==0)
{
printf("\n\t当前计算到%10d 的阶乘!!!........\n",i);
}
for(j=1;j=digit;j++)
{
data[j]*=i;
}
for(j=1;j=digit;j++)
{
if(data[j]9)
{
for(k=1;k=digit;k++)
{
if(data[digit]9)
{
digit++;
}
data[k+1]+=data[k]/10;
data[k]%=10;
}
}
}
}
printf("\n\n\n\t%d!=\n",num);
for(j=digit;j0;j--)
{
printf("%d",data[j]);
}
printf("\n\n\t%d!共有%d位......\n\n\n",num,digit);
printf("是否保存文件?(y\\n)");
fflush(stdin);/************注意这里,刷新缓冲区,避免前面输入数字时遗留的回车符影响这里的读取******/
if(tolower(getchar())=='y')
{
printf("请输入文件名:");
gets(fname);
if((fp=fopen(fname,"w"))==NULL)
{
printf("打开文件%s失败",fname);
exit(0);
}
fprintf(fp,"\t%d!=\n",num);
for(j=digit;j0;j--)
{
fprintf(fp,"%d",data[j]);
}
fprintf(fp,"\n%d!有%d位......\n\n\n",num,digit);
fclose(fp);
}
return 0;
}
肯定不显示的,getch()本身就是不回显的。而且这里也不能用getch(),而应该用getchar()
把你的程序改了一下。正确的都保留,错误的予以纠正:
#include stdio.h
#include conio.h
void function1();
int main()
{
function1();
return 0;
}
void function1()
{
char array[100];
int i=0;
while((array[i]=getchar())!='#')
i++;
array[i]='\0';
puts(array);
getch();
}
这么深的嵌套函数基本很难看懂的,所以首先你要简化一下逻辑,避免这么复杂的嵌套语句.一般来说,内嵌超过层时最多的,超过了就有问题
至于看问题,肉眼时看不出来的,因为谁也不知道你fprintf时实际写入的东西是啥.有两个核心的点
a) 在fprintf处加断点,看看写入的数据是否在数组范围内,是否越界,写入的数据是否合法
b) 检查fprintf的返回值,看看是否报错
绝大部分错误都不是看出来的,调试是程序员必备技能