2015-10-10 2 views
0

Напишите простую программу телефонного справочника на C++, которая ищет телефонные номера в файле, содержащем список имен и телефонных номеров. Пользователю должно быть предложено ввести имя и фамилию, а затем программа выведет соответствующий номер или указывает, что имя не находится в каталоге. После каждого поиска программа должна спросить пользователя, хотят ли они найти другой номер, а затем либо повторить процесс, либо выйти из программы. Данные в файле должны быть организованы так, чтобы каждая строка содержала имя, фамилию и номер телефона, разделенные пробелами. Вы можете вернуться к началу файла, закрыв его, открыв его снова.Номер телефона Lsit

Я не могу получить строку check = strstr (phoneDirectory, name); для работы strstr part keep the error: никакой экземпляр перегруженной функции «strstr» не соответствует типам аргументов list.

Вот копия моего кода:

#include <iostream> 
#include <string> 
#include <fstream> 
#include <cstring> 

using namespace std; 

int arraySize(); 

int main() 
{ 
    const int SIZE = arraySize(); 

    char *phoneDirectory; 
    int size=0; 
    char name; //name to look for 
    char *check = NULL; 
    bool find = false; 

    phoneDirectory = new char [SIZE]; 

    ifstream phoneNumbers; 
    phoneNumbers.open("phoneNumbers.txt"); 

    if (!phoneNumbers) 
     cout << "Error opening data file\n"; 

    //looping throught the name file 
    else 
    { 
     for (int i = 0; i < SIZE; i++) 
     { 
      phoneNumbers >> phoneDirectory; 
     } 

     phoneNumbers.close();  //closes data file 
    } 

    phoneNumbers.close(); 

    // Get a name or partial name to search for. 
    cout << "Enter a name or partial name to search for: "; 
    cin.getline(phoneDirectory, name); 

    cout << "\nHere are the results of the search: " << endl; 
    int entries = 0; 

    for (int i = 0; i < size; i++) 
    { 
     check = strstr(phoneDirectory, name); 

     if (check != NULL) 
      find = true; 
    } 

    if (!find) 
     cout << "No matches!" << endl; 


    delete [] phoneDirectory; 
    return 0; 
} 

int arraySize() 
{ 
    string phoneNum; 
    int size = 0; 

    ifstream phoneNumbers;  // Input file stream object 

    // Open the data file. 
    phoneNumbers.open("phoneNumbers.txt"); 
    if (!phoneNumbers) 
     cout << "Error opening data file\n"; 

    //looping throught the name file 
    else 
    { 
     while (getline(phoneNumbers, phoneNum)) 
     { 
      size++; 
     } 
     phoneNumbers.close();  //closes data file 
    } 
    return size; 
} 
+0

Пожалуйста, используйте [MCVE] (https://stackoverflow.com/help/mcve) –

+0

В вашей программе есть несколько проблем. Ваша переменная 'name' является единственным символом' char', и вы пытаетесь прочитать несколько символов. Ваша переменная 'phoneDirectory' является массивом' char', который равен только количеству строк, в отличие от массива строк для каждой строки. Поскольку вы используете класс 'string', я также предлагаю вашему телефонному каталогу' std :: vector' 'std :: string'. Тогда вам не нужно открывать файл для подсчета строк, вы можете просто читать строки и помещать их в вектор. – pstrjds

+0

Мы никогда не изучали векторы, поэтому я не могу их использовать, и я не предполагаю использовать строку, которую я только что использовал для их отладки. Предположим, мы используем строки c. – Doe

ответ

1

Ваш name переменная является char. Должно ли это быть char*?

+0

О, это исправило эту проблему. Благодарю. Моя программа все еще разбилась, но сейчас другая точка. По крайней мере, я ближе. Спасибо – Doe

Смежные вопросы