Массивы и их поиск - PullRequest
       3

Массивы и их поиск

0 голосов
/ 24 марта 2012

Я пытаюсь закончить мою последнюю отладку сегодня вечером.Моя проблема в том, что я писал этот код в течение нескольких дней, и у него есть несколько проблем. Предыдущий пост

Теперь он компилируется и не падает, но есть несколько проблем с моими функциями, которые не работают должным образом (или вообще не работают).

#include <iostream>              
#include <string>
#include <fstream>
using namespace std; 

string bookTitle [50];
string bookAuthor [50];
int loadData (string pathname);         
int showall (int counter);
int authorSearch (string bookAuthor [50]);




int main ()

{  
    string pathname;
    int counter=0;
    char choice;

    cout<<"Input the name of the file to be accessed: ";
    cin>>pathname;
    loadData (pathname);
    showall (counter);

    cout<<"\n\n\n\n What would you like to do \n (A for Author Search , T for Title Search, Q to quit):";
    cin>>choice;

    while (choice != 'Q' , choice != 'q')
    {
          if (choice == 'A', choice == 'a')
          {
                    int authorSearch (string bookAuthor [50], char choice);
          }

          if (choice == 'T', choice == 't')
          {
                     int   titleSearch (string bookTitle [50], char choice);   
          }   


    }

    cout<<"Press <Enter> to Exit";
    cin.ignore();
    cin.get();      
    return 0;              

    cout<<"Press <Enter> to Exit";
    cin.ignore();
    cin.get();      
    return 0;                
}


int loadData (string pathname) // Loads data from infile into arrays
{
    fstream infile; 
    int counter = 0;
    infile.open(pathname.c_str()); //Opens file from user input in main
    if( infile.fail() )
     {
         cout << "File failed to open";
         return 0;
     }   

     while (!infile.eof())
     {

           infile >> bookTitle [counter] ;  //takes input and puts into parallel arrays
           infile >> bookAuthor [counter];
           counter++;
     }

     infile.close();
}

int showall (int counter)        // shows input in title(author) format
{

     cout<<bookTitle<<"("<<bookAuthor<<")";   

}

void authorSearch (string bookAuthor [50], char choice) // Function to search Author Array
{
     string target = "";
     cout<<"Which author would you like to search for: "<<target; //input
     for (int count = 0; count++;)
     {
         if(bookAuthor[count] == target) //tests input against array and outputs result
         {
                              cout<<bookTitle[count]<<bookAuthor[count];
         }
     }

}



void titleSearch (string bookTitle [50], char choice) // Function to Serch Title Array
{
     string target = "";
     cout<<"Which author would you like to search for: "<<target; //input
     for (int count = 0; count++;)
     {
         if(bookAuthor[count] == target) //tests input against array and outputs result
         {
                              cout<<bookTitle[count]<<bookAuthor[count];
         }
     }

}

ПоследнийВерсия, без серьезных улучшений.У меня проблемы с получением функций для работы после выбора меню.ShowAll, кажется, работает, но выводит hex.Еще раз спасибо всем!

#include <iostream>              
#include <string>
#include <fstream>
using namespace std; 

string bookTitle [50];
string bookAuthor [50];
int loadData (string pathname);         
int showall (int counter);
void authorSearch (string bookAuthor [50]);
void titleSearch (string bookTitle [50]);



int main ()

{  
    string pathname;
    int counter=0;
    char choice;

    cout<<"Input the name of the file to be accessed: ";
    cin>>pathname;
    loadData (pathname);
    showall (counter);

    cout<<"\n\n\n\n What would you like to do \n (A for Author Search , T for Title Search, Q to quit):";
    cin>>choice;

    while (choice != 'Q'|| choice != 'q')
    {
          if (choice == 'A'|| choice == 'a')
          {
                   void authorSearch (string bookAuthor [50], char choice);
          }

          if (choice == 'T'|| choice == 't')
          {
                    void titleSearch (string bookTitle [50], char choice);   
          }   


    }

    cout<<"Press <Enter> to Exit";
    cin.ignore();
    cin.get();      
    return 0;              

}


int loadData (string pathname) // Loads data from infile into arrays
{
    fstream infile; 
    int counter = 0;
    infile.open(pathname.c_str()); //Opens file from user input in main
    if( infile.fail() )
     {
         cout << "File failed to open";
         return 0;
     }   

     while (!infile.eof())
     {

           infile >> bookTitle [counter] ;  //takes input and puts into parallel arrays
           infile >> bookAuthor [counter];
           counter++;
     }

     infile.close();
}

int showall (int counter)        // shows input in title(author) format
{

     cout<<bookTitle<<"("<<bookAuthor<<")";   

}

void authorSearch (string bookAuthor [50], char choice) // Function to search Author Array
{
     string target = "";
     cout<<"Which author would you like to search for: "<<target; //input
     for (int count = 0; count++;)
     {
         if(bookAuthor[count] == target)
         {
                              cout<<bookTitle[count]<<bookAuthor[count];
         }
     }

}



void titleSearch (string bookTitle [50], char choice) // Function to Serch Title Array
{
     string target = "";
     cout<<"Which title would you like to search for: "<<target; //input
     for (int count = 0; count++;)
     {
         if(bookAuthor[count] == target) //tests input against array and outputs reults
         {
                              cout<<bookTitle[count]<<bookAuthor[count];
         }
     }

}

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

Оператор запятой должен быть заменен логическим and или or, && и || соответственно.См. использование оператора запятой .Кроме того, authorSearch является функцией void.Если вы хотите вызвать authorSearch, просто напишите authorSearch(...) вместо int authorSearch(...).

Кроме того, вам необходимо убедиться, что ваши прототипы соответствуют вашим реализациям.int authorSearch (string bookAuthor [50]) - это не то же самое, что void authorSearch (string bookAuthor [50], char choice).Вы не соответствовали их типам и их параметрам.

0 голосов
/ 24 марта 2012

1) Функция showall() выводит гекс, потому что вы не можете отображать массивы таким образом, вам нужен какой-то цикл.Он просто печатает начальный адрес каждого массива.

2) В своих функциях поиска вы никогда не читаете строку target от пользователя.

3) Эти *Циклы 1009 * никогда не будут выполняться:

for (int count = 0; count++;)
{
    ...
}

Вы устанавливаете count на 0 и затем проверяете значение перед приращением.Тест не пройден, и тело цикла не выполнено.

4) Будьте осторожны, исправляя петли for().Я не вижу никаких тестов, чтобы предотвратить использование недопустимого индекса, превышающего (жестко закодированный) размер ваших массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...