C语言中输入函数无法执行

[复制链接]
查看11 | 回复2 | 2016-6-19 12:26:18 | 显示全部楼层 |阅读模式
#include
#include
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;i9)

{

for(k=1;k9)

{

digit++;

}

data[k+1]+=data[k]/10;

data[k]%=10;

}
}
}
}
printf("\n\n\n\t%d!=\n",num);
for(j=digit;j>0;j--)
{
printf("%d",data[j]);
}
printf("\n\n\t%d!共有%d位......\n\n\n",num,digit);

printf("是否保存文件?(y\\n)");
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;j>0;j--)
{
fprintf(fp,"%d",data[j]);
}
fprintf(fp,"\n%d!有%d位......\n\n\n",num,digit);
fclose(fp);
}
return 0;
}
这个程序是个算大数阶乘的程序,后面一部分是要把结果保存到文件,但是其中的if(tolower(getchar())=='y'){.....}中,经过调试这一句结束后直接就return了,后来我把程序改了一下,变成
char t;
printf("是否保存文件?");
t=getchar();
if((t=='y')||(t=='Y')){......}
后调试发现getchar那句貌似根本就没有执行
我又把if那句改成
if(1){....}
发现if语句中可以正常执行
后来我怀疑是编译器的问题,但我在dos下的tc,linux下的gcc,windows下的vc环境中编译,结果还是一样,轻微这个程序里面有什么错???

回复

使用道具 举报

千问 | 2016-6-19 12:26:18 | 显示全部楼层
因为前面输入数字时,最后总要按下回车键,这就输入了一个回车符,而后面的getchar()会读取这个字符,而不等待从键盘输入(因为缓冲区不为空),修改如下:#include #include 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
回复

使用道具 举报

千问 | 2016-6-19 12:26:18 | 显示全部楼层
在getchar之前加上一句fflush(stdin);把输入缓冲区清空
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行