Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言输出一个等式_C - Fatal编程技术网

用C语言输出一个等式

用C语言输出一个等式,c,C,我正在用C编写一个小程序,它将在1秒的时间内输出CPU使用的总百分比。我已经让它在大部分情况下工作了,它确实计算出了正确的数字,但最终的计算是将修井除以总计*100,它总是输出0。我不知道为什么。任何帮助都会很好。代码如下 #include <stdio.h> #include <glibtop.h> #include <glibtop/cpu.h> #include <unistd.h> #include <math.h> unsi

我正在用C编写一个小程序,它将在1秒的时间内输出CPU使用的总百分比。我已经让它在大部分情况下工作了,它确实计算出了正确的数字,但最终的计算是将修井除以总计*100,它总是输出0。我不知道为什么。任何帮助都会很好。代码如下

#include <stdio.h>
#include <glibtop.h>
#include <glibtop/cpu.h>
#include <unistd.h>
#include <math.h>

unsigned long cpu1Total, cpu1User, cpu1Nice, cpu1Sys, cpu1Work;
unsigned long cpu2Total, cpu2User, cpu2Nice, cpu2Sys, cpu2Work;
unsigned long workOver, totalOver, cpuTotal;

int main(){

    glibtop_init();

    glibtop_cpu cpu;
    glibtop_get_cpu (&cpu);

    cpu1Total = cpu.total;
    cpu1User = cpu.user;
    cpu1Nice = cpu.nice;
    cpu1Sys = cpu.sys;

    cpu1Work = cpu1User + cpu1Nice + cpu1Sys;

    usleep ( 1000000 ) ;

    glibtop_get_cpu (&cpu);

    cpu2Total = cpu.total;
    cpu2User = cpu.user;
    cpu2Nice = cpu.nice;
    cpu2Sys = cpu.sys;

    cpu2Work = cpu2User + cpu2Nice + cpu2Sys;

    workOver = cpu2Work - cpu1Work;
    totalOver = cpu2Total - cpu1Total;

    cpuTotal = workOver / totalOver * 100;

    printf("Cpu Idle : %ld \n", cpuTotal);

    return 0;
}
#包括
#包括
#包括
#包括
#包括
未签名的长CPU1总数、CPU1用户、cpu1Nice、cpu1Sys、cpu1Work;
无符号长cpu2Total、cpu2User、cpu2Nice、cpu2Sys、cpu2Work;
未签名的长修井、totalOver、cpuTotal;
int main(){
glibtop_init();
glibtop_cpu;
glibtop_get_cpu(&cpu);
cpu1Total=cpu.total;
cpu1User=cpu.user;
cpu1Nice=cpu.nice;
cpu1Sys=cpu.sys;
cpu1Work=CPU1SER+cpu1Nice+cpu1Sys;
美国LEEP(1000000);
glibtop_get_cpu(&cpu);
cpu2Total=cpu.total;
cpu2User=cpu.user;
cpu2Nice=cpu.nice;
cpu2Sys=cpu.sys;
cpu2Work=cpu2User+cpu2Nice+cpu2Sys;
修井=CPU2作业-CPU1作业;
totalOver=cpu2Total-cpu1Total;
cpuTotal=修井/总里程*100;
printf(“Cpu空闲:%ld\n”,cpuTotal);
返回0;
}

除法中的变量声明为整数。问题是如果你把两个整数除,你就不会得到一个分数。这意味着如果分母大于分子,结果将为0

整数除法不会自动生成浮点结果


要解决此问题,您可以将公式中的至少一个变量重新声明为浮点,甚至在计算中强制转换它们。

除法中的变量声明为整数。问题是如果你把两个整数除,你就不会得到一个分数。这意味着如果分母大于分子,结果将为0

整数除法不会自动生成浮点结果


要解决此问题,您可以在公式中重新声明至少一个变量为浮点,甚至在计算中强制转换它们。

您使用的是
无符号长
,而您应该使用
浮点
进行除法。
long
或任何整数值都不能处理小数点,因此如果您有一个数字0当您应该使用
float
double
进行除法时,您使用的是
无符号long
long
或任何整数值都不能处理小数点,因此如果你有一个数字0整数除法…先转换为浮点数…当然,真是个白痴!:如果它没有溢出,
workOver*100/totalOver
避免了截断。整数除法…先进行浮点运算…当然,真是个白痴!:如果它没有溢出,
workOver*100/totalOver
可以避免截断。不,你很好。这些事情很容易忘记,并且很自然地假设一个操作可能达到最高的精度。@Steve思考(并说)“我是个白痴”其实很好。。。羞耻感是一种强大的情感,由进化而来,它使我们更加意识到我们行为的后果。不,你很好。这些事情很容易忘记,并且很自然地假设一个操作可能达到最高的精度。@Steve思考(并说)“我是个白痴”其实很好。。。羞耻感是一种强大的情感,由进化产生,它使我们更加意识到自己行为的后果。