|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);清空缓冲区
|
|