马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 顶级太阳 于 2022-7-19 22:14 编辑
我写的代码如下:#include<stdio.h>
#define max 1024
int sum=0,a,b,c,t,i,j,flag=1; //sum为中间计算结果,a为输入要验证的值,b为计算式初值,c为计算式末值,t为计算中间结果,i为要求的计算数,flag用于标注存在计算失败的标志位。
int nkcs[max][3];
char ch;
int main()
{
printf("请输入一个整数:");
scanf("%d",&i);
for(j=3;j<=i;j++)
{
sum=j*j*j;
b=1;
c=3;
t=b;
while(t!=sum)
{
if(t<sum)
{
t+=c;
c+=2;
}
if(t>sum)
{
t-=b;
b+=2;
}
if(c>sum)
{
printf("尼科彻斯定理验证失败,失败时,初始值为%d,结束值为%d\n",b,c);
flag=0; //出现不符合时,设标记位
break;
}
}
nkcs[j-3][0]=j;
nkcs[j-3][1]=b;
nkcs[j-3][2]=c-2;
}
//以上循环内为验证尼科彻斯定理,每个值的结果入二维数组
//判断是否有不符合结论
if(flag)
{
printf("经验证,3~%d之间的所有整数均符合尼科彻斯定理! \n",i);
printf("是否打印所有式子(y/n):");
ch=getchar();
if(ch=='y'||ch=='Y') //格式输出
{
for(j=0;j<i-2;j++)
{
printf("%d^3==%d==%d+%d",nkcs[j][0],nkcs[j][0]*nkcs[j][0
]*nkcs[j][0],nkcs[j][1],nkcs[j][1]+2);
if(nkcs[j][2]-nkcs[j][1]>4)printf("...+%d\n",nkcs[j][2]); else if(nkcs[j][2]==nkcs[j][1]+4)printf("+%d\n",nkcs[j][2]);
}
}
}
finish: return 0;
}
前面所有内容,包括数组里存储的结果都一步步进行了验证,没有问题。只是最后的格式输出部分,在第1题里运行已经没有问题了。到了这个题目,进行循环输出多个结果时,每次询问是否打印后,屏幕显示了第47行的内容,然后直接退出。求助问题所在,怎么处理。
这个涉及到输入缓冲区的问题
你这个程序,首先读取了一个整数,如13,你在输入了13之后,肯定会回车,但scanf只拿走了13,并没有拿走那个'\n',也就是回车,导致后面的getchar在读取输入缓冲区时,直接就读到了'\n',从而造成了你无法输入
解决方法:清空缓冲区
在ch=getchar();前,先执行fflush(stdin);清空缓冲区
|