title: Short program hangs in C
body: <p>Every time this code runs in UNIX, it hangs and displays a new line without a prompt. It compiles without error. Anyone know what's up here?</p>
  
  <pre><code>/*
  This program uses a Monte Carlo simulation to maximize widget profits.
   */
  
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  
  // 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 &lt; 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 &lt; 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 &lt; (MIN_COST*100) || c &gt; (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 &lt; (MIN_CONVERSION*100) || r &gt; (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 &lt; 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 &gt; 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);
  
  }
  </code></pre>