Dear gnu / g++ programers: I copy a piece of simple code from c++ book (practical c++ programing) , page 296, chapter Debugging and optimation with input also according its indicated , increasing in order in numbers.dat (page 289) file --------------------- eric@eric-laptop:~/practicalCpp$ cat search0.cpp /********************************************************************************** * search -- Search a set of numbers. * * * * Usage: * * search * * you will be asked numbers to lookup * * * * Files: * * numbers.dat -- numbers 1 per line to search * * (Numbers must be ordered) * **********************************************************************************/ #include <iostream> #include <fstream> #include <cstdlib> #include <cstdio> #include <assert.h> const int MAX_NUMBERS = 1000; // Max numbers in file const char *const DATA_FILE = "numbers.dat"; // File with numbers int data[MAX_NUMBERS]; // Array of numbers to search int max_count; // Number of valid elements indata int main() { std::ifstream in_file; // Input file int middle; // Middle of our search range int low, high; // Upper/lower bound int search; // number to search for in_file.open(DATA_FILE, std::ios::in); if (in_file.bad()) { std::cerr << "Error:Unable to open " << DATA_FILE << '\n'; exit(8); } /* * Read in data */ max_count = 0; while (true) { char line[30]; // Line from the input file if (in_file.eof()) break; in_file.getline(line, sizeof(line)); assert(max_count >= 0); assert(max_count < sizeof(data)/sizeof(data[0])); std::sscanf(line, "0", &data[max_count]); if (data[max_count] == -1) break; ++max_count; } while (true) { std::cout << "Enter number to search for or -1 to quit:"; std::cin >> search; if (search == -1) break; low = 0; high = max_count; while (true) { ////////// if (low >= high) { std::cout << "Not found\n"; break; } /////////// middle = (low + high) / 2; assert(middle >= 0); assert(middle < sizeof(data)/sizeof(data[0])); if (data[middle] == search) { std::cout << "Found at index " << middle << '\n'; break; } /* if (low == high) { std::cout << "Not found\n"; break; } */ assert(middle >= 0); assert(middle < sizeof(data)/sizeof(data[0])); if (data[middle] < search) low = middle + 1; else high = middle - 1; } } return (0); } eric@eric-laptop:~/practicalCpp$ cat numbers.dat 4 6 14 16 17 eric@eric-laptop:~/practicalCpp$ -------------------------------------------------- but it not only fail to find any numbers in it, like 4, 6, 14, and if I input any character non-integer, it response unstop "Enter number to search for or -1 to quit:" plz help, Eric/* all that chapter talk about gdb is almost not work on my test, for example , print middle no symbol table is loaded. Use the "file" command */