0
這是我的程序試圖搜索或顯示包含水果數量的整個地圖的代碼。C++地圖值傳遞
由於某種原因,搜索不起作用(沒有返回任何結果),並且代碼假設顯示所有數量僅返回地圖的最後一個條目。
以下是代碼的一些片段。
請忽略是否有更多的軟件包或語法錯誤,因爲我沒有將整個代碼複製到這裏。
編輯與錯字修正和添加的fruit.h
的fruit.txt
apple
02
orange
06
pear
03
lemon
07
它是從的main.cpp和提示輸入用於任務選擇讀取。
#include <string>
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <algorithm>
#include "fruit.h"
using namespace std;
int main()
{
void readFile(); //read file
readFile();
void perform(int); //case selection
int caseInput;
cout << "Press 1 for search" << endl;
cout << "Press 2 to show all" << endl;
cout << "choice: ";
cin >> caseInput;
perform(caseInput);
}
void readFile() //read line and pass to fruit.cpp using vector
{
vector<fruit> fruitVector;
string fruitName;
int quantity;
ifstream file;
txt.open("fruit.txt");
while (!txt.eof())
{
getline(txt, fruitName);
getline(txt, quantity);
fruitVector.push_back(fruit(fruitName, quantity));
}
txt.close();
}
void perform(int caseInput)
{
string searchTerm;
switch (caseInput)
{
case 1: // search function
{
cout << "input: ";
cin >> searchTerm;
taskOne(searchTerm);
break;
}
case 2:
{
tasktwo(); // not done yet, but nvm
break;
}
}
}
這是我fruit.cpp
#include <string>
#include <map>
#include <iostream>
#include <cctype>
#include "fruit.h"
using namespace std;
fruit::fruit(string fruitName, int quantity)
{
fruitMap[fruitName] = quantity; //storing vectors to map
passMap(fruitMap); //pass the map to task.cpp
};
這是我task.cpp
#include <cstdlib>
#include <iostream>
#include <string>
#include <map>
using namespace std;
map<string, int> fruitMap;
void passMap(map<string, int>input)
{
fruitMap = input;
}
void taskOne(string searchTerm)
{
auto it = fruitMap.find(searchTerm);
if(it != fruitMap.end())
{
cout << "output = " << endl;
cout << it->second << endl; // should print out the quantity of fruit
}
//in fact i try output the whole map using the code:
//
//for (auto it = fruitMap.begin(); it != fruitMap.end(); ++it)
//{
// cout << it->first << " " << it->second << "\n";
//}
//
//but it only output the last line which is:
//lemon 07
}
#include <string>
#include <map>
#include "task.h"
class fruit{
private:
std::string fruitName;
std::int quantity;
std::map<std::string, int> fruitMap;
public:
fruit(std:string, int);
}
你可以顯示fruit.h的內容嗎? – 4pie0
在'main'中,本地'caseInput'設置爲來自命令行的用戶輸入。但'caseNum'被傳遞給'perform'函數。某處有錯字嗎?在'readFile'中,'readFile'完成時,本地'fruitVector'實例不見了。這是你想要的嗎?既然你已經在'fruit'類裏面有一個'map'容器,然後爲每個水果實例調用'passMap',爲什麼不用'main'函數聲明一個本地的地圖實例呢?請在紙上畫一些圖片,瞭解所有這些容器如何相互關聯。你會找到更好的方法來實現該系統。 –
fruit.h addded。 – user3647416