gpt4 book ai didi

c - 短程序在 C 中挂起

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:10 24 4
gpt4 key购买 nike

每次此代码在 UNIX 中运行时,它都会挂起并显示一个新行而没有提示。它编译没有错误。有人知道这里有什么吗?

/*
This program uses a Monte Carlo simulation to maximize widget profits.
*/

#include <stdio.h>
#include <stdlib.h>

// constant values used in the simulation
#define MIN_WIDGETS 1000 // minimum widgets per month
#define MAX_WIDGETS 1500 // maximum widgets per month

#define MIN_COST 0.25 // minimum cost per widget
#define MAX_COST 0.82 // maximum cost per widget

#define MIN_CONVERSION 0.01 // minimum converstion rate
#define MAX_CONVERSION 0.05 // maximum converstion rate

#define MIN_PROFIT 38 // minimum profit per sale
#define MAX_PROFIT 43 // maximum profit per sale

#define FIXED_OVERHEAD 400 // fixed overhead cost

#define NUM_SIMULATIONS 100 // number of simulations performed

void main()
{

// to keep track of inputs in highest-profit simulation
int bestW = 0; // widgets per month
float bestC = 0; // cost per widget
float bestR = 0; // rate of converstion
float bestP = 0; // profit per sale
float bestProfit = 0; // highest profit

srand(time(0)); // initialize the random number generator
float h = FIXED_OVERHEAD;

int i; // loop index
for(i = 0; i < NUM_SIMULATIONS; i++)
{
// initialize inputs for this individual simulation
int w = 0; // quantity of widgets bought
float c = 0; // cost of a widget
float r = 0; // conversion rate
float p = 0; // profit per sale
float profit = 0; // profit

// simulate quantity of widgets bought per month, between MIN_WIDGETS and MAX_WIDGETS
w = random() % (MAX_WIDGETS + 1); // to set the maximum value of w at MAX_WIDGETS
while (w < MIN_WIDGETS) {
w = random() % (MAX_WIDGETS + 1); // fetch new random number that may fit parameters
}

// simulate cost per widget, between MIN_COST and MAX_COST
c = random() % 100; // to convert random number into an integer between 0 and 99
while (c < (MIN_COST*100) || c > (MAX_COST*100)) {
c = random() % 100; // fetch new random number that may fit parameters
}
c = c / 100.0; // convert cost back from cents into dollars

// simulate conversion rate, between MIN_CONVERSION and MAX_CONVERSION
r = random() % 100; // to convert random number into an integer between 0 and 99
while (r < (MIN_CONVERSION*100) || r > (MAX_CONVERSION*100)) {
r = random() % 100; // fetch new random number that may fit parameters
}
r = r / 10.0; // convert back into fraction

// simulate profit per sale, between MIN_PROFIT and MAX_PROFIT
p = random() % ((MAX_PROFIT + 1)*100); // to convert random number into an integer between 0 and 4300
while (p < MIN_PROFIT*100) {
p = random() % (MAX_PROFIT + 1); // fetch new random number that may fit parameters
}
p = p / 100.0; // convert back into floating point with two decimal places after period

profit = (w * r * p) - (h + c * w);

printf("Current profit is $%.2f, with %d widgets at a %.2f cost per widget with a %.1f conversion rate and %.2f profit/sale.\n",
profit, w, c, r, p);

if (profit > bestProfit) {
bestW = w;
bestC = c;
bestR = r;
bestP = p;
bestProfit = profit;
}

}

printf("Maximum profit is $%.2f, with %d widgets at a %.2f cost per widget with a %.1f conversion rate and %.2f profit/sale.\n",
bestProfit, bestW, bestC, bestR, bestP);

}

最佳答案

我认为错误在这里:

while (p < MIN_PROFIT*100) {
p = random() % (MAX_PROFIT + 1); // fetch new random number that may fit parameters
}

如果进入循环体,p 将被设置为 0 和 MAX_PROFIT (= 43) 之间的数字。它永远不会大于或等于 MIN_PROFIT*100 (= 3800),因此它将进入无限循环。

作为旁注,您可能需要考虑在此处使用 do { } while 循环,而不是使用 while 循环并编写两次循环体。将代码写两次是犯错的极好方法,因为当您更改其中一个实现时,您始终必须记住更改另一个。如果您忘记更新两者,则会引入错误。这似乎就是这里发生的事情。

关于c - 短程序在 C 中挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7627979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com