array input loop

enter 3 digits into each of the array value's and keep entering 3 digits until we enter a digit of 600 which then stops us entering to the array and will then print the array on screen, it looks like it could be a really simple solution but i cant see it.

here is what we have so far:

void main()
{

            const int max = 100;

            int a[ max ];

            int instruction;

                  cin >> instruction;

                  a[ max ] = instruction;

                  while ( instruction!=600 )
                  {

                        for ( int i =0; i < max; i++ )
                              
                              a[ max ] = instruction;

                                    i++;

                        cin >> instruction;

                  }

                        for ( int j = 0; j < max; j++ )  
                        
                              cout << setw( 7 ) << j << setw( 13 ) << a[ j ] << endl;

                                    
}
a_migdalAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

bcladdCommented:
(1) Look at the dimensionality of your loops:
    while ...
      for ...

    for ...

The first pair of loops are nested and process a two dimensional structure. a is a one dimensional structure. There is a problem.

So, which loop should go?

Since you read until you see 600, you need a while loop.

You also need a counter to count the number of instructions that have been stored in the array.

You also need to store the 600 in the array so you really need a do ... while () loop. Something like:

  do
    // read in instruction
    // increment number of instructions counter
    // store the instruction at a[number of instructions counter]
  while (instruction != 600);

(Since this is homework I won't write the code for you).

Make sure you declare your counter before the do while.

(2) This does have one potential flaw in that if the number of instructions exceeds max you will have a buffer over run problem. I will ignore that for the moment unless you feel it is important.

-bcl
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
kmalhotraCommented:
void main()
{

      const int max = 100;
      int a[ max ];
      int instruction, count;
      count = 0;
      
      do {
            cin>>instruction;
            a[count] = instruction;
            count++;
      }while (instruction != 600);

      cout<<"-----------------------"<<endl;
      for (int ctr = 0; ctr < count; ctr++) {
              cout << setw( 7 ) << ctr << setw( 13 ) << a[ ctr ] << endl;
      }
}
0
jj819430Commented:
don't use an array for this. You will be running into memory problems like bcladd said.
I am going to edit kmalhotra's submission so  you won't have any issues with the memory.

void main()
{

     string a = "";
     int instruction, count;
     count = 0;
     
     do {
          cin>>instruction;
          a += instruction;
          count++;
     }while (instruction != 600);

     cout<<"-----------------------"<<endl;
     for (int ctr = 0; ctr < count; ctr++) {
            cout << setw( 7 ) << ctr << setw( 13 ) << a[3*ctr] + a[3*ctr +1] + a[3*ctr + 2] << endl;
     }
}


All this is is putting it into a string. It will automatically deal with any memory allocation needs because it is really a char* and it using pointers. Much simpler for your project then actually writing a linked list or something like that.
0
Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

jj819430Commented:
Oh, kmalhotra
I hope you don't mind my working with the code you already posted.
0
bcladdCommented:
jj819430-

I think the original poster wants to be able to extract the instructions as units. Your suggestion to use an STL container is a good one: I think a vector of int would be more appropriate in this case (look at poster's other open questions for some background).

-bcl
0
RJSoftCommented:
Just change the part of your code where you index.

You put max to index with. An array's first index is 0

               a[ max ] = instruction;

Should be something like

              a[current_index] = instruction;

Then you did it again.

               while ( instruction!=600 )
               {

                    for ( int i =0; i < max; i++ )
                         
////////////////max....
                         a[ max ] = instruction;

                             
Also, you should not copy other persons code here as you should know the code before you advance. Teachers will know you have no clue and give you the F.

Another thing you want to prompt inside your loop to get the values

               while ( instruction!=600 && instruction < max )
               {

                         
                   clrscr();//conio.h
                   cout << "Enter value ";
                   cin   >> instruction;
     
                   a[ i ] = instruction;

              }//end loading

the var i now has how many instructions got loaded. Hmmm, you could use that value in another loop to print them.
while(x < i)
{
print...
}

RJ
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.