[問題] 輸入姓名跑出成績
#include <fstream> //載入fstream標頭檔
#include <iostream> //載入iostream標頭檔
#include <cstdlib> //載入cstdlib標頭檔
#include <string>
#define SIZE 200
using namespace std;
int binarySearch(string x[], int n, string key)
{
bool found = false;
int index, head = 0, tail = n, mid;
while(!found && (tail >= head))
{
mid = (head + tail) / 2;
if(key == x[mid])
{
found = true;
index = mid;
break;
}
else if(key > x[mid])
head = mid + 1;
else
tail = mid - 1;
}
return (found? index:-1);
}
void show_data( string name[], int grade[], int n )
{
for( int i = 0; i < n; i++ )
cout << name[i] << "\t" << grade[i] << endl;
}
void myMenu() //設定選單的函數
{
cout << "\n\n===== 選 單 =====" << endl;
cout << "0. 結束" << endl;
cout << "1. 顯示資料內容" << endl;
cout << "2. 以姓名查詢成績" << endl;
cout << "請選擇(1~3, 0 = 結束): ";
}
int main() //主程式
{
string name[SIZE], key;
int grade[SIZE], n;
int choice, result; //定義整數 choice
ifstream ifile("c:\\grade.txt", ios::in ); //開啟grade.txt檔案
if( ifile == NULL )
{
cout << "Error: cannot open file!" << endl;
system( "pause" );
exit( 1 );
}
n = 0;
while( !ifile.eof() )
{
ifile >> name[n] >> grade[n];
n++;
}
ifile.close();
do
{
myMenu(); //呼叫選單的函數
cin >> choice; //輸入要做的CASE
switch( choice )
{
case 1: cout << "1. 顯示資料內容" << endl;
show_data( name, grade, n ); //
break; //跳離switch敘述
case 2: cout << "2. 以姓名查詢成績" << endl;
cout << "請輸入要查詢的姓名" << endl;
cin>>key; //輸入要查詢的數字
result = binarySearch( name, n, key);
if(result == -1)
cout << "你所要查詢的資料不在資料庫裡!!!"
<< endl;
else
cout << key<< "的分數是"<< grade[result] << endl ;
break; //跳離switch敘述
}
} while( choice != 0 ); //選擇0時離開程式
system( "pause" );
return 0;
}
這是我目前的程式
有一個檔案
grade.txt
放在C
內容是
John 85
Tom 90
May 89
Apple 91
Bob 81
Jack 55
Jenny 96
Aby 77
Dan 89
我現在的問題在case 2
要怎麼輸入姓名讓他跑出成績呢??
因為這個檔案沒有照字母排列
所以無法順利跑出
所以我是要先寫一個讓他排列的方法嗎??
還是有其他方法可以直接比較輸入的key 跟name[]字串???
請高手教教我~~謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.46.215.118
推
05/21 12:41, , 1F
05/21 12:41, 1F
→
05/21 14:39, , 2F
05/21 14:39, 2F
→
05/21 14:41, , 3F
05/21 14:41, 3F
推
05/21 14:42, , 4F
05/21 14:42, 4F
→
05/21 14:42, , 5F
05/21 14:42, 5F
→
05/21 14:43, , 6F
05/21 14:43, 6F
→
05/21 14:46, , 7F
05/21 14:46, 7F
→
05/21 14:46, , 8F
05/21 14:46, 8F
推
05/22 06:53, , 9F
05/22 06:53, 9F
→
05/22 06:54, , 10F
05/22 06:54, 10F
→
05/22 06:55, , 11F
05/22 06:55, 11F
→
05/22 06:56, , 12F
05/22 06:56, 12F
→
05/22 06:58, , 13F
05/22 06:58, 13F