Solved

function looping forever

Posted on 2000-03-28
7
237 Views
Last Modified: 2010-05-19
this is supposed to find all numbers that belong to a name....it looks, and finds if more exists, if it does, it supposed to print it out...if there are no, it gives an error...it was doing both before then i resturced the if and it well, doesnt work anymore....arg....any ideas?  thnx


void listNumber(phone [], int & i) {
      cout << "\nEnter name to find extention: ";
      char j[16];
      int r = 0;
      cin >> j;
      cout << "\nSearching...\n";
      
      do {
            if ( strcmp ( directory[r].name, j ) == 0 ) {
                  cout << endl << r << ". " << directory[r].name << " " << directory[r].number;
            }
            
            
                        
            else {
                  cerr << "\nError 320: Not found.\n\n";
                menu(i);
                           
            }
      }while (r < i);
}
0
Comment
Question by:weinrj
7 Comments
 
LVL 1

Expert Comment

by:sunj
ID: 2666076
The logic is a bit messy there.. Try this:


void listNumber(phone [], int & i) {
cout << "\nEnter name to find extention: ";
char j[16];
int r = 0;
cin >> j;
cout << "\nSearching...\n";

do {
if ( strcmp ( directory[r].name, j ) == 0 ) {
cout << endl << r << ". " << directory[r].name << " " << directory[r].number;
return;
}
r++;
}while (r < i);


cerr << "\nError 320: Not found.\n\n";
     menu(i);
}    

0
 

Accepted Solution

by:
vhawargi earned 50 total points
ID: 2666367
note that "sunj"'s code stops at giving only one number.
 try this code. i am using a flag. if the flag is never set (or is zero, if considered as counter) then you can

print out the error message.

void listNumber(phone [], int & i)
{
   cout << "\nEnter name to find extention: ";
   char j[16];
   int r = 0;
   cin >> j;
   cout << "\nSearching...\n";
   // your code till here
   
   int fFound = 0;  // a counter flag

   do {
         if ( strcmp ( directory[r].name, j ) == 0 )
         {
                  cout << endl << r << ". " << directory[r].name << " " << directory[r].number;
            fFound++;  // increment to indicate we found..
         }
      r++;
    } while ( r < i) ;

    if (!fFound)   // if the flag never got incremented... (we can also NAND r's value as an exceptional handler)
    {
      cerr << "\nError 320: Not found.\n\n";
      menu(i);
    }

return;
}
   


0
 

Expert Comment

by:manjit
ID: 2666998
you never incremented the value of r so it will just keep checking the same reconrd again and again ..!!

try inserting a r++; in the while and that should work ..
0
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 

Author Comment

by:weinrj
ID: 2667858
current problems:  only finds first record and still prints error, doesnt find anything else

void listNumber(phone [], int & i) {
      cout << "\nEnter name to find extention: ";
      char j[16];
      
      cin >> j;
      
      cout << "\nSearching...\n";
      int r = 0;
      while ( r < i) {
      if ( strcmp ( directory[r].name, j ) != 0 )   {
           cerr << "\nError 320: Not found.\n\n";
           menu(i);
        }
      else {
           cout << endl << r << ". " << directory[r].name << " " << directory[r].number;
               r++;
        }
      }
      
      //r++;
}
0
 

Expert Comment

by:vhawargi
ID: 2667875
did you try my code that i had given earlier? does it differ from your requirements?
0
 

Author Comment

by:weinrj
ID: 2668092
i didnt try it as i had server problems, i was just able to post....
0
 

Author Comment

by:weinrj
ID: 2669863
Many thnx...I was going to use a flag that controlled the error but didnt know exactly what to do with it or how, many thnx!
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question