so i guess there must be some sort of an error in my logic but on line 119 i started a counter that only goes up when a pair is made in the game. Since there are a total of 8 pairs, i set that when the counter is 8 the bool nullexists turns false. when it is false it should skip the while loop and output that you have won.

Any ideas on what is actually wrong here? I did check and the counter is going up at the correct times

here is the code

//*******************************************************************************************************************
// Homework 5
// 
//     
//     
//
// This program is a matching game.  The user uses a cordinant system to select
// cards on a 4x4 board.
// Input:			the user inputs the cordinants of the cards they want to flip
// Processing: 		the program randomly generates pairs of cards in random locations
//					on the 4x4 board.  it also adjusts the user input so that the
//					cordinants match with the matrix counting system.
// Output: 			the game board, the cards fliped, if they match, and the next board piece
//*******************************************************************************************************************


#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    char comma;
    int row1, row1a, column1, column1a, row2, row2a, column2, column2a, cards[4][4], cards_unflipped[4][4] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} , counter(0), g(0);
	bool nullexists = true;
    srand((unsigned)time(NULL));
   
    //fill board with pairs
    bool makeNext = false;
    memset(cards, 0, sizeof(cards));
    srand(time(NULL));

        for( int i = 1; i < 9; i++ )
            {
                makeNext = false;
                while(!makeNext)
                    {
                        int x1, y1, x2, y2;
                        x1 = rand()%4;
                        y1 = rand()%4;
                        x2 = rand()%4;
                        y2 = rand()%4;
                        if( (x1 != x2 || y1 != y2) && (cards[x1][y1] == 0 && cards[x2][y2] == 0) )
                        {
                            cards[x1][y1] = i;
                            cards[x2][y2] = i;
                            makeNext = true;;
                        }
                    }
            }
       
                   

        // initial display board
        cout<<"    1 2 3 4\n";
        cout<<"  ";
        for (int i=0; i<=8; i++)
        {
            cout<<"-";
        }

        cout<<endl;
  
        for (int r=0; r<4; r++)
        {
			cout<<r+1<<" | ";
            for (int c=0; c<4; c++)
            {
				cout<<cards_unflipped[r][c]<<" ";
            }
			cout<<endl;
        }



   //Game Loop --------------------------------------------------------------------------------
   while (nullexists = true)

   {
     //selection of cards
    cout << "Please select the first card row and column seperated by a comma.\n";
    cin >> row1a >> comma >> column1a;

    cout<<"Please select the second card row and column seperated by a comma.\n";
    cin>>row2a>>comma>>column2a;
       
        // adjusting for matrix cordinants
        row1 = row1a - 1;
        row2 = row2a - 1;
        column1 = column1a - 1;
        column2 = column2a - 1;

   
        // make sure that the cordinants are on the board
        if (row1a > 4 || row2a > 4 || column1a > 4 || column2a > 4 || row1a < 1 || row2a < 1 || column1a < 1 || column2a < 1)
        {
            cout << "please pick cordinants on the board." << endl <<endl;
       
            cout << "Please select the first card row and column seperated by a comma.\n";
            cin >> row1a >>comma >> column1a;

            cout << "Please select the second card row and column seperated by a comma.\n";
            cin >> row2a >> comma >> column2a;

        }
     
        // cards chosen
        cout << "The cards you picked were " << cards[row1][column1] << " and " << cards[row2][column2] << endl;
     
       if (cards[row1][column1]== cards[row2][column2])

       {
            cards_unflipped[row1][column1] = cards[row1][column1];
            cards_unflipped[row2][column2] = cards[row2][column2];


            counter = counter++;
                if (counter == 8)
                {
                    bool nullexists = false;
                }

				if (bool nullexists = false)
				{
					cout << " Congrats, You Won!" << endl;
						break;
				}

				
			cout << "Press n to continue." << endl;
			while (1)
			 {
			   if (getchar() == 'n')
			   {
			      break;
				  }
			   }

		 // move to blank screen
		 for (g=0; g <= 20; g++)
			{
			    cout << endl;
		  }


    //reveal the flipped cards
    cout<<"    1 2 3 4\n";
    cout<<"  ";
    for (int i=0; i<=8; i++)
    {
        cout<<"-";
    }
    cout<<endl;
    for (int r=0; r<4; r++)
    {
        cout<<r+1<<" | ";
        for (int c=0; c<4; c++)
        {
               
                cout<<cards_unflipped[r][c]<<" ";
            }
        cout<<endl;
        }

       }
   
       else
       {
       
            cards_unflipped[row1][column1] = cards[row1][column1];
            cards_unflipped[row2][column2] = cards[row2][column2];
           

			//reveal the flipped cards
			cout<<"    1 2 3 4\n";
			cout<<"  ";
			for (int i=0; i<=8; i++)
			{
				cout<<"-";
			}
			cout<<endl;
			for (int r=0; r<4; r++)
			{
				cout<<r+1<<" | ";
				for (int c=0; c<4; c++)
				{
					cout<<cards_unflipped[r][c]<<" ";
				}

				cout<<endl;
			}

		// pause for user to look at the cards they flipped
		cout << "Press n to continue." << endl;
		while (1)
		{
			if (getchar() == 'n')
			{
				break;
			}
		}

		//reset flipped cards


		cards_unflipped[row1][column1] = 0;
        cards_unflipped[row2][column2] = 0;


		// move to blank screen

		for (g=0; g <= 20; g++)
		{
			cout << endl;
		}

		//reveal the flipped cards
		cout<<"    1 2 3 4\n";
		cout<<"  ";
		for (int i=0; i<=8; i++)
		{
			cout<<"-";
		}
		cout<<endl;
		for (int r=0; r<4; r++)
		{
        cout<<r+1<<" | ";
			for (int c=0; c<4; c++)
			{            
				cout<<cards_unflipped[r][c]<<" ";
            }
			cout<<endl;
        }

	   }
       
    }

	//GAME LOOP END -------------------------------------------------------------------------------

   cout << "You Won!" << endl;
 

    return 0;
}

Heres another thing.
You are making the variable bool nullexists up at the top and then when you are doing anything with it you remake a new bool variable with the same name.

Line numbers are based off first post.

Line 26: bool nullexists = true; This is fine.

Line 78: while(nullexists = true) change to -> while(nullexists == true) Line 121: bool nullexists = false; change to -> nullexists = false; Line 124: if(bool nullexists = false) change to -> if(nullexists == false) Here is another way of writing "if(a == true)" and "if(a == false)". if(a) <- if it is true if(!a) <- if it is false
This works for bool variables.

You even have it from the code I provided with "makeNext".

I'm not saying that will fix it I'm just saying thats a problem with your code. I don't really like trying to fix up code that is poorly formatted but I'll give this a try since I helped you with part of it already.

I got it to break the loop and quit the program but if you pick a card that has already got picked it will flip it back to 0.

The two things that I wanna ask you are:
1- Are you allowed to use functions?
2- Can I rewrite this for you and add comments showing you how to have a better structure?

ya sry that was the only problem, i missed your post before sry bout that

sufo, that would be great, yes we are allowed functions. I do have to turn it in shortly but im going to turn in my own work. It would be nice to see what i should be doing differently.

Yeah submit what you have because it works I will just post pretty much the same thing but with using functions and I'll clean up some parts.

6 hours later I'm back!
Sorry, I got side tracked but anyways I managed to finished a version using functions (I could have made it using a class but I decided not to).
This is half as many lines as the other version you have.

#include <iostream>

using namespace std;

struct CARD
{
	bool isFlipped;
	int value;
};

void makeCardSet(CARD cards[4][4])
{
	bool makeNext = false;
    srand(time(NULL));
    
    for( int i = 0; i < 4; i++ )
		for( int c = 0; c < 4; c++ )
			cards[i][c].value = 0;
			
    for( int i = 1; i < 9; i++ )
    {
        makeNext = false;
        while(!makeNext)
        {
            int x1, y1, x2, y2;
            x1 = rand()%4;
            y1 = rand()%4;
            x2 = rand()%4;
            y2 = rand()%4;
            if( (x1 != x2 || y1 != y2) && (cards[x1][y1].value == 0 && cards[x2][y2].value == 0) )
            {
                cards[x1][y1].value = i;
                cards[x1][y1].isFlipped = false;
                cards[x2][y2].value = i;
                cards[x2][y2].isFlipped = false;
                makeNext = true;
            }
        }
    }	
}

void display(CARD cards[4][4])
{
	cout << endl << "  1 2 3 4" << endl;
	for( int i = 0; i < 4; i++ )
	{
		cout << i+1 << " ";
		for( int c = 0; c < 4; c++ )
			if( cards[i][c].isFlipped == true )
				cout << cards[i][c].value << " ";
			else
				cout << "0 ";
		cout << endl;
	}
	cout << endl;
}

int main()
{
	bool done = false, valid;
	int row[2], col[2], pairs = 0;
	char divider;
	CARD cards[4][4];
	
	makeCardSet(cards);
	
	while(!done)
	{
		display(cards);
		for( int i = 0; i < 2; i++ )
		{
			cout << "Input row and column you would like to flip (ex 2,1):" << endl;
			do
			{
				valid = false;
				cin >> row[i] >> divider >> col[i];
				if( row[i] <= 0 || row[i] > 4 || col[i] <= 0 || col[i] > 4 )
					cout << "Input numbers within the grid!" << endl;
				else if( cards[row[i]-1][col[i]-1].isFlipped )
					cout << "That card is already flipped!" << endl;
				else if( i == 1 && row[1] == row[0]+1 && col[1] == col[0]+1 )
					cout << "You just picked that card!" << endl;
				else
					valid = true;
			}while(!valid);
			
			row[i]--;
			col[i]--;
			
			if( i == 0 )
				cout << "You flipped a " << cards[row[i]][col[i]].value << "!" << endl;
				
		}
		cards[row[0]][col[0]].isFlipped = true;
		cards[row[1]][col[1]].isFlipped = true;
		
		display(cards);
		
		if( cards[row[0]][col[0]].value != cards[row[1]][col[1]].value )
		{
			cards[row[0]][col[0]].isFlipped = false;
			cards[row[1]][col[1]].isFlipped = false;
			cout << "Not a match!" << endl;
		}
		else
		{
			pairs++;
			cout << "You found a pair!" << endl;
			
			if( pairs == 8 )
			{
				done = true;
				cout << "You Won!" << endl;
			}				
		}
		
		system("PAUSE"); //change this to some other thing if you aren't using windows
		for( int i = 0; i < 25; i++ )
			cout << endl;
	}
	
	return 0;
}

yes that is a lot cleaner. Thanks for writing this out for me. Im going to look it over in more detail in a bit, right now, study for exam!

This article has been dead for over six months. Start a new discussion instead.