C语言 第16课 动动手第2题问题求助
请好心人帮看看下边的程序。运行程序出现bug:我想在循环中打印计算进度,按理说应该每次循环都能打印一次进度,但是实际运行中直到程序结束,进度好像只打印了2~3次。请高手指点一下哪里出了问题,谢谢!
// 根据已知公式求派的近似值 派=1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 +……
#include <stdio.h>
#include <math.h>
#define MAX pow(10,8)//设置分母的最大上限
int main()
{
double pi;//存放派值
int f,p;//f=分母;p用来观察计算进度
for (pi=1.0,f=3;f< MAX;f++,f++)
{
pi=pi-1.0/f;
f=f+2;
pi=pi+1.0/f;
p=f/MAX*100;
printf ("计算进度:%d%%\r",p);//这里打印进度,否则程序运行后没反应心里慌
}
printf ("\nPi的近似值为:%.7f \n",pi*4.0);
return 0;
}
~
// 根据已知公式求派的近似值 派=1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 +……
#include <stdio.h>
#include <math.h>
#define MAX pow(10,6)//设置分母的最大上限
int main()
{
double pi;//存放派值
int f, p;//f=分母;p用来观察计算进度
for(pi = 1.0, f = 3; f< MAX; f++, f++)
{
pi = pi - 1.0 / f;
f = f + 2;
pi = pi + 1.0 / f;
p = f / MAX * 100;
printf("计算进度:%d%%\r", p);//这里打印进度,否则程序运行后没反应心里慌
}
printf("\nPi的近似值为:%.7f \n", pi*4.0);
return 0;
}
人造人 发表于 2017-2-27 22:59
感谢你的回复,虽然不是我想要的答案。你把pow(10,8)改为(10,6)只是减少了计算量让程序瞬间完成,这和我看不见打印进度的问题没啥关系;另外你给程序加的空格确实感觉好看点了,我以后会改进。谢谢! bin2yx 发表于 2017-2-28 00:08
感谢你的回复,虽然不是我想要的答案。你把pow(10,8)改为(10,6)只是减少了计算量让程序瞬间完成,这 ...
运行了一下你的代码,你用的pow(10,8)是显示进度的,只不过每百分之一会停顿好几秒,因为运算量太大吧,楼上把范围改小之后进度条就很明显了 ,你可以改成pow(10,7)试试{:10_279:} 人造人 发表于 2017-2-28 00:37
我知道原因了,应该是系统的问题,我在linux下运行你改的程序瞬间就完成了,看不到进度条。
在Windows下运行你的程序能看得很清楚,和你截图的视频差不多。
Linux下运行我自己的程序时除非出现中断(即按了键盘或者动了鼠标),才会看到进度条改变。
我不会录你那样的视频,只能打字了解释了。
再次表示感谢! bin2yx 发表于 2017-3-1 21:55
我知道原因了,应该是系统的问题,我在linux下运行你改的程序瞬间就完成了,看不到进度条。
在Windows下 ...
也就是说问题解决了? 人造人 发表于 2017-3-1 23:49
也就是说问题解决了?
问题没解决,原因可能是Linux下程序的循环运行太快,以致于肉眼看不见进度变化。就像孙悟空在天下第一武道会上的战斗。。。
我目前只能靠飞快的晃动鼠标,才能看见进度变化。 bin2yx 发表于 2017-3-2 11:28
问题没解决,原因可能是Linux下程序的循环运行太快,以致于肉眼看不见进度变化。就像孙悟空在天下第一武 ...
试试这个(linux下)
// 根据已知公式求派的近似值 派=1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 +……
#include <stdio.h>
#include <math.h>
#define MAX pow(10,7)//设置分母的最大上限
int main()
{
double pi;//存放派值
int f, p;//f=分母;p用来观察计算进度
printf("\033[?25l");// 隐藏光标
for(pi = 1.0, f = 3; f< MAX; f++, f++)
{
pi = pi - 1.0 / f;
f = f + 2;
pi = pi + 1.0 / f;
p = f / MAX * 100;
printf("计算进度:%d%%\r", p);//这里打印进度,否则程序运行后没反应心里慌
}
printf("\nPi的近似值为:%.7f \n", pi*4.0);
printf("\033[?25h"); // 显示光标
return 0;
}
人造人 发表于 2017-3-2 13:31
试试这个(linux下)
我录下了运行情况,第一次是没动鼠标键盘,第二次晃动鼠标才看得见显示。录制的文件是.webm,只能压缩上传。
bin2yx 发表于 2017-3-2 18:13
我录下了运行情况,第一次是没动鼠标键盘,第二次晃动鼠标才看得见显示。录制的文件是.webm,只能压缩上 ...
ctrl + alt + F1(ctrl + alt + F1不行就ctrl + alt + F2)
登陆你的账户
在这里试试
人造人 发表于 2017-3-2 18:55
ctrl + alt + F1(ctrl + alt + F1不行就ctrl + alt + F2)
登陆你的账户
在这里试试
这样显示是没问题了,就是计算速度慢得像乌龟,和在Windows下一样了,还不如我晃鼠标呢{:5_97:} bin2yx 发表于 2017-3-2 19:14
这样显示是没问题了,就是计算速度慢得像乌龟,和在Windows下一样了,还不如我晃鼠标呢
速度慢是因为
#define MAX pow(10,7)//设置分母的最大上限
太大了,可以改小点
#define MAX pow(10,5) // 5次方
如果这样没有问题,说明是bash的问题 人造人 发表于 2017-3-2 19:23
速度慢是因为
#define MAX pow(10,7)//设置分母的最大上限
太大了,可以改小点
反正用ctrl+alt+f2后运行显示进度是完全没问题的 bin2yx 发表于 2017-3-2 19:29
反正用ctrl+alt+f2后运行显示进度是完全没问题的
嗯,是你的bash问题 人造人 发表于 2017-3-2 19:23
速度慢是因为
#define MAX pow(10,7)//设置分母的最大上限
太大了,可以改小点
我暂时不纠结这个问题了,谢谢你啦! bin2yx 发表于 2017-3-2 19:29
反正用ctrl+alt+f2后运行显示进度是完全没问题的
在shell中执行
sh命令,运行程序试试 人造人 发表于 2017-3-2 19:35
在shell中执行
sh命令,运行程序试试
没用,还是不能正常显示 bin2yx 发表于 2017-3-2 20:16
没用,还是不能正常显示
我还有最后一个办法,重新安装gnome(不建议这样做) 人造人 发表于 2017-3-2 21:02
我还有最后一个办法,重新安装gnome(不建议这样做)
解决了。
int f, p, x;//f=分母;p用来观察计算进度,x用来确保看见进度
for (pi = 1.0, f = 3, x = 0; f< MAX; f++, f++,x++)
{
pi = pi - 1.0 / f;
f = f + 2;
pi = pi + 1.0 / f;
p = f / MAX * 100;
if (x>100)
{
printf ("计算进度:%d%%\r", p);//这里打印进度,否则程序运行后没反应心里慌
x=0;
}
这样就完美地显示了。
还有个问题请教:怎么全选复制vim打开的文档,现在我的代码如果有几页的话 复制起来好麻烦
页:
[1]