Hey, it looks like I'm stuck yet again. I've been working on this for awhile and I can't figure out why it's not working properly. Here's what I'm supposed to do:
Create a function that simulates coin tossing. The function should have no input and no return value. When the function is called, it first asks the number of times they want to flip the coin, say 20, then the function will call random number function rand() 20 times. Each time rand() will randomly generate two numbers between 0 and 1 and they represent the heads and tails respectively. If it's heads print H if it's tails print T.

#include<iostream>
#include<string>
using namespace std;
void displayMenu(void);
void coinToss(int flips);
 
int main()
{
    int choice;
    int flips;
 
    string dummy;
    do{
         cout<<"What would you like to do?\n";
         displayMenu();
         cin >> choice;
         switch(choice)
        {
        case 1:
               cout <<"How many times would you like to flip the coin?"<< endl;
               cin >> flips;
               coinToss( flips );
               getline( cin, dummy );
               getline( cin, dummy );
               break;
         }
}
        while( choice == 3 );
        cout <<"The program has terminated. Good Bye"<< endl;
        return 0; 
}
 
void displayMenu( void )
 
{
cout << "==========================\n";
cout << "1. Flip a coin\n";
cout << "2. Multiplication\n";
cout << "3. Quit\n";
cout << "==========================\n";
}
 
void coinToss( int flips )
 
{
 
   int counter = 0, head = 0, tail = 0, toss;
   while( flips != 0 )
 
{
   toss--;
   counter++;
   toss = rand() % 1;
 
   if( toss == 1 )
{
   head++;
   cout << "H" << endl;
}
 
   else
{
   tail++;
   cout << "T" << endl;
}
}
}

The problem that I'm having is that when I run the program it always gives me all Tails and one head. So if you have any ideas as to why it's doing that I'd appreciate the help. Thanks again for all the help.

Dani AI

Generated

Three likely root causes explain the “all Tails and one Head” symptom in the original snippet: an incorrect modulus, use of an uninitialized variable before it’s assigned, and a loop that never updates the toss count. correctly flagged the modulus problem (modulo 1 always produces 0) and the need to seed the generator; pointed out the mismatch between the assignment (a parameterless function that asks for the number of tosses) and the posted coinToss(int) signature; ’s formatting note is also useful—clear code reduces mistakes.

Quick checklist to fix and harden the routine

  • Don’t use an uninitialized variable or do operations (like toss--) before assigning a value. That triggers undefined behavior.
  • Generate a 0/1 outcome correctly (either a Bernoulli draw or an integer in {0,1}), not a modulus by 1.
  • Make the loop explicitly controlled (for-loop or decrement the flips parameter) so the function runs exactly the requested number of times.
  • Prefer the modern <random> library for clear, testable results; use std::random_device to seed std::mt19937 for non-repeating runs, or a fixed seed for reproducible tests.

A short, modern example (parameterless coinToss() that prompts for count):

#include <iostream>
#include <random>

void coinToss() {
  int flips;
  if (!(std::cin >> flips) || flips <= 0) return;
  std::mt19937 gen(std::random_device{}());
  std::bernoulli_distribution d(0.5);
  int heads = 0, tails = 0;
  for (int i = 0; i < flips; ++i) {
    if (d(gen)) { ++heads; std::cout << "H\n"; }
    else        { ++tails; std::cout << "T\n"; }
  }
  std::cout << "Heads: " << heads << ", Tails: " << tails << '\n';
}

Final tips: compile with all warnings enabled (e.g. -Wall -Wextra), run with tools like Valgrind for UB, and use small test counts to verify distribution before trusting larger runs.

Recommended Answers

All 8 Replies

Consider initializing your random number generator at the beginning of your program:

#include <ctime>
srand(time(0));

Your logic is totally weird here:

toss--;
   counter++;
   toss = rand() % 1;

It's useless to deincrement toss when it gets assigned the random number 2 statements later. And rand() % 1 won't work, because the remainder of anything divided by 1 will be 0 (except for decimals, but you're assigning to an integer so any fractions are thrown away).

Also, your coinToss() function needs to be formatted properly. It'll only take you 30 seconds... ;)

So where is the function that has no input and no return value and upon calling it asks the user how many coin tosses and then simulates that number of coin tosses?

Hey, thank you for all the replies I really appreciate it. Sorry I kind of disappeared but I got a bit sick after I posted this. I ended up getting it to work, so thank you all for the help. One quick question..did you all struggle when you first started C++ programming? I'm a big time perfectionist and it's driving me crazy that I'm having so much difficulty. If you did struggle what did you do to improve? Thanks again for the responses.

write more, more and more code till you faint in front of the computer ;)

Yeah, you've told it to Print H if 1, else print t. Therefore If the number is 1 (and only 1) it will be H. Randomly generated numbers are not whole numbers. You will get 0.45623. To fix it, it should be something like this:

if (rand()<0.5);
print "h",
else
print "t",
end

commented: Don't resurrect dead threads like this. -4

Not only do you resurrect an old thread, you don't even know what language you're dealing with. This is a C++ forum, not BASIC. Random numbers are integers.

Not only do you resurrect an old thread, you don't even know what language you're dealing with. This is a C++ forum, not BASIC. Random numbers are integers.

Im sorry, but I didn't do it. I was stupid enough to leave myself logged into a ssp school computer during lunch/recess.

I had a look at my (dry cough) response and i know who did it. Im new to this site, and i had no idea it was and old thread because i found it in google.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.