我编写了一个基本上是调查的程序,并读取用户响应的响应。在我的程序结束时,我希望它打印具有长响应的语句的百分比。我已声明超过5秒的语句是长响应,并发出了一个警报信号,用于识别何时发生这种情况。到目前为止,这是我的代码:
int count = 0;
int num;
float per;
int main()
{
num = 0;
per = (count/num) *100;
printf("percent: %f", per );
}
答案 0 :(得分:2)
除以0
。num
是您用于输入的变量。由于未知原因,你最终会与它分开。
您有一个计数器,用于调用处理程序的次数。添加另一个计数器,表示您已经回答调查的次数,并在主循环中增加它。
这样的事情:
int noHandlerCalls=0; // Because good variable names is good
void handler(int sig){
noHandlerCalls++;
...
}
int main()
{
...
int noSurveyAnswers=0;
while ( num != 0 ) {
if (num == 5 )
signal(SIGUSR1, handler);
signal(SIGALRM, SIG_IGN);
alarm(2);
printf("Enter a number\n");
signal(SIGALRM, handler);
scanf("%d", &num);
noSurveyAnswers++;
}
...
printf("percent: %f", (100.0*noHandlerCalls)/noSurveyAnswers );
顺便说一下。这是一个很好的例子,说明在发布之前遵循本指南的好处:https://stackoverflow.com/help/mcve
如果您这样做,您的问题将仅包含此代码:
int count = 0;
int num;
float per;
int main()
{
num = 0;
per = (count/num) *100;
printf("percent: %f", per );
}
这是一个非常小的代码可能仍会重现你所询问的错误,在那个阶段,你可能已经自己想出来了。 :)