我的程序旨在從包含標題和作者列表的文件中獲取輸入。該文件看起來像這樣:搜索並行數組
title associated author next title associated author etc.
我遇到的問題是我showBooksByTitle和showBooksByAuthor功能。此時此代碼僅返回完全匹配,並且還打印一個空白換行符和一個帶有一些空格和一個()的新行。
當然,任何幫助,非常感謝。這是我第一年編程。我已經包含了整個代碼,以保證安全,我不會遺漏任何可能成爲問題的東西。
#include <iostream>
#include<string>
#include<fstream>
#include<cstring>
using namespace std;
struct Book {
string title;
string author;
};
const int ARRAY_SIZE = 1000;
Book books [ARRAY_SIZE];
int loadData (string);
void showAll (int);
int showBooksByAuthor (int, string);
int showBooksByTitle (int, string);
int main() {
//Declare variables
string pathname;
string title;
string name;
string word;
int count;
char response;
//ask user for pathname
cout << "What is the path of the library file? ";
cin >> pathname;
cout << endl;
count = loadData(pathname);
//input data into arrays
loadData(pathname);
cout << endl << count << " records loaded successfully." << endl << endl;
//Show user menu
cout << "Please enter Q to Quit, A to search for the Author, T to search for the Title, "
<< endl << "or S to Show all: ";
cin >> response;
switch(response) {
case 'q':
break;
case 'Q':
break;
case 'a':
cout << endl << "Please enter author's name: ";
cin >> name;
showBooksByAuthor(count, name);
break;
case 'A':
cout << endl << "Please enter author's name: ";
cin >> name;
showBooksByAuthor(count, name);
break;
case 't':
cout << endl << "Please enter all or part of the title: ";
cin >> title;
showBooksByTitle(count, title);
break;
case 'T':
cout << endl << "Please enter all or part of the title: ";
cin >> title;
showBooksByTitle(count, title);
break;
case 's':
cout << endl;
showAll(count);
break;
case 'S':
cout << endl;
showAll(count);
break;
default:
cout << endl << "Invaled input, please try again: ";
break;
}
//pause and exit
cout << endl;
system("PAUSE");
return 0;
}
int loadData(string pathname) {
int i = 0;
int j = 0;
ifstream library;
//open file, if not successful, output error message
library.open(pathname.c_str());
if (!library.is_open()) {
cout << "Unable to open input file." << endl;
return -1;
}
//reads title and author from file into designated string
//this is assuming title comes first and author comes after
while(!library.eof()) {
getline(library, books[i].title);
getline(library, books[i].author);
i++;
}
return i;
}
void showAll (int count) {
for (int i = 0; i < count; i++) {
cout << books[i].title << " (" << books[i].author << ")" << endl;
}
}
int showBooksByAuthor(int count, string name) {
int found;
for(int n = 0; n < 28; n++) {
found = name.find(books[n].author);
if(found != string::npos) {
cout << endl << books[n].title << " (" << books[n].author << ")" << endl;
}
}
return 0;
}
int showBooksByTitle (int count, string title) {
int found;
for(int n = 0; n < 28; n++) {
found = title.find(books[n].title);
if(found !=string::npos) {
cout << endl << books[n].title << " (" << books[n].author << ")" << endl;
}
}
return 0;
}
什麼是'28' ...? – 2013-03-18 11:52:51
啊,是的,這段代碼從文本文件中讀取,文本文件中列出了28本書。我將附加該文件,但在此處看不到任何選項。我可以將它粘貼 – Jason 2013-03-18 11:54:40
你不應該從'loadFile'保存返回值,並將它用作其他函數的n參數嗎?硬編碼「幻數」被認爲是不好的。考慮一下編輯文件do _not_包含28個條目時會發生什麼。 – 2013-03-18 11:56:33