鱼C论坛

 找回密码
 立即注册
查看: 1566|回复: 19

C语言 第16课 动动手第2题问题求助

[复制链接]
发表于 2017-2-27 18:25:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请好心人帮看看下边的程序。
运行程序出现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;
}
~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-27 22:59:22 | 显示全部楼层
// 根据已知公式求派的近似值 派=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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-28 00:08:26 | 显示全部楼层

感谢你的回复,虽然不是我想要的答案。你把pow(10,8)改为(10,6)只是减少了计算量让程序瞬间完成,这和我看不见打印进度的问题没啥关系;另外你给程序加的空格确实感觉好看点了,我以后会改进。谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-28 00:37:08 | 显示全部楼层
bin2yx 发表于 2017-2-28 00:08
感谢你的回复,虽然不是我想要的答案。你把pow(10,8)改为(10,6)只是减少了计算量让程序瞬间完成,这 ...

GIF.gif

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
bin2yx + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-1 11:15:57 | 显示全部楼层
运行了一下你的代码,你用的pow(10,8)是显示进度的,只不过每百分之一会停顿好几秒,因为运算量太大吧,楼上把范围改小之后进度条就很明显了 ,你可以改成pow(10,7)试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-1 21:55:36 | 显示全部楼层

我知道原因了,应该是系统的问题,我在linux下运行你改的程序瞬间就完成了,看不到进度条。
在Windows下运行你的程序能看得很清楚,和你截图的视频差不多。
Linux下运行我自己的程序时除非出现中断(即按了键盘或者动了鼠标),才会看到进度条改变。
我不会录你那样的视频,只能打字了解释了。
再次表示感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-1 23:49:28 | 显示全部楼层
bin2yx 发表于 2017-3-1 21:55
我知道原因了,应该是系统的问题,我在linux下运行你改的程序瞬间就完成了,看不到进度条。
在Windows下 ...

也就是说问题解决了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-2 11:28:53 | 显示全部楼层
人造人 发表于 2017-3-1 23:49
也就是说问题解决了?

问题没解决,原因可能是Linux下程序的循环运行太快,以致于肉眼看不见进度变化。就像孙悟空在天下第一武道会上的战斗。。。
我目前只能靠飞快的晃动鼠标,才能看见进度变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 13:31:43 | 显示全部楼层
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-2 18:13:09 | 显示全部楼层
人造人 发表于 2017-3-2 13:31
试试这个(linux下)

我录下了运行情况,第一次是没动鼠标键盘,第二次晃动鼠标才看得见显示。录制的文件是.webm,只能压缩上传。

lolo-2017-03-02T10-05-45-189124200Z.rar

1.56 MB, 下载次数: 1

录下了运行情况

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 18:55:32 | 显示全部楼层
bin2yx 发表于 2017-3-2 18:13
我录下了运行情况,第一次是没动鼠标键盘,第二次晃动鼠标才看得见显示。录制的文件是.webm,只能压缩上 ...

ctrl + alt + F1(ctrl + alt + F1不行就ctrl + alt + F2)
登陆你的账户
在这里试试
GIF.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-2 19:14:29 | 显示全部楼层
人造人 发表于 2017-3-2 18:55
ctrl + alt + F1(ctrl + alt + F1不行就ctrl + alt + F2)
登陆你的账户
在这里试试

这样显示是没问题了,就是计算速度慢得像乌龟,和在Windows下一样了,还不如我晃鼠标呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 19:23:22 | 显示全部楼层
bin2yx 发表于 2017-3-2 19:14
这样显示是没问题了,就是计算速度慢得像乌龟,和在Windows下一样了,还不如我晃鼠标呢

速度慢是因为
#define MAX pow(10,7)//设置分母的最大上限
太大了,可以改小点
#define MAX pow(10,5) // 5次方

如果这样没有问题,说明是bash的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-2 19:29:07 | 显示全部楼层
人造人 发表于 2017-3-2 19:23
速度慢是因为
#define MAX pow(10,7)//设置分母的最大上限
太大了,可以改小点

反正用ctrl+alt+f2后运行  显示进度是完全没问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 19:32:21 | 显示全部楼层
bin2yx 发表于 2017-3-2 19:29
反正用ctrl+alt+f2后运行  显示进度是完全没问题的

嗯,是你的bash问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-2 19:34:52 | 显示全部楼层
人造人 发表于 2017-3-2 19:23
速度慢是因为
#define MAX pow(10,7)//设置分母的最大上限
太大了,可以改小点

我暂时不纠结这个问题了,谢谢你啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 19:35:09 | 显示全部楼层
bin2yx 发表于 2017-3-2 19:29
反正用ctrl+alt+f2后运行  显示进度是完全没问题的

在shell中执行
sh命令,运行程序试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-2 20:16:07 | 显示全部楼层
人造人 发表于 2017-3-2 19:35
在shell中执行
sh命令,运行程序试试

没用,还是不能正常显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 21:02:07 | 显示全部楼层
bin2yx 发表于 2017-3-2 20:16
没用,还是不能正常显示

我还有最后一个办法,重新安装gnome(不建议这样做)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 21:59:00 | 显示全部楼层
人造人 发表于 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打开的文档,现在我的代码如果有几页的话 复制起来好麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表