Solved

function looping forever

Posted on 2000-03-28
7
235 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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generat…
IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

911 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now