2016-10-24 41 views
-1

我很難搞清楚將文本文件讀入程序的過程。在get_answer_key_array中,我試圖讀取文本文件的第一行,並將其放入數組中。將幾種類型的數據讀入數組

文本文件看起來是這樣的:

ABDBCBDBABABCBABCB

鮑勃·鮑比adcad abcbd BACB

在這一計劃將有第一線接聽鍵測試每個文本文件。第一行之後的每一行都會讓人的名字,空間,姓氏,空間,成績和缺失的成績在我達到時用「 - 」代替。

我目前正在努力獲取第一行並將其放入答案關鍵數組中。 我知道,一旦我完成了第一行,我可以把人名,姓和答案放到三個單獨的平行數組中。我有麻煩提出正確的方法來檢查第一個新行,以便我可以得到答案的關鍵。

好吧,現在我已經改變了我的get_answer_key_array來獲得所有我需要的數組。目前我正在嘗試將第一行(答案鍵)放入answer_key []的第一個數組中。我試圖實現getline函數,但我試圖弄清楚如何才能獲得最高分。是否有可能讓我的eof()循環在第一行結束時停止將第一行的數據傳送到數組中?我的 answer_key [i] = key;需要改變爲我敢打賭的其他東西!

我還應該提到,一旦我弄清楚如何將頂部行放入數組中,我想通過以下工作流使用此過程將其餘數據(名稱和答案)分別放入它們各自的數組中:

in_stream >> first_name[i] >> last_name[i] >> answers[i]; 
while(!in_stream.eof()) { 
    i++; 
    in_stream >> first_name[i] >> last_name[i] >> answers[i]; 
} 
in_stream.close(); 

低於

void get_input_file(ifstream &in_stream); //gets the text file name from the user 
void get_arrays(ifstream &in_stream, int answer_key[], string first_name[], string last_name[], int answers[], int &count); //brings the data from text file into all of the parallel arrays 
//void score_grader(int &target, string first_name[], string last_name[], int answers[], int &count, int &score); 
//void letter_grade(int &score, int &letter_grade); 
//void student_report(int &target, string first_name[], string last_name[], int answers []); 

int main() 
{ 
    ifstream in_stream; 
    int answer_key[30], count = 0, score = 0; //initializing the answer key array up to 30 answers 
    string first_name[20];  //initializing the first name array 
    string last_name[20];  //initializing the last name array 
    int answers[30];   //initializing the answers array 

    cout << "Welcome to the Test Grader." << endl; //welcome message 
    get_input_file(in_stream); //function call to get the file name 
    get_arrays(in_stream, answer_key, first_name, last_name, answers, count); //function call to create the arrays 
} 


void get_input_file(ifstream &in_stream) { 
    string file_name; //initializing the file name string 

    do { 
     cout << "Enter the file name you would like to import the data from: " << endl; //asks user to input name of file 
     cin >> file_name;   //user types name of file 
     in_stream.open(file_name.c_str());  //program opens the stream 

     if(in_stream.fail()) { 
      cout << "Error finding file, try again.\n"; //if failed, asks user for file name again 
      continue; //continues back to the do loop 
     } 
     break; 
    } while(true); 

    cout << "File Obtained: " << file_name << endl; //alerts user of file success with printed name 


} 

void get_arrays(ifstream &in_stream, int answer_key[], string first_name[], string last_name[], int answers[], 
int &count) { 
    int i = 0; 
    string key; //This will be the storage variable for the first line of text file 
    if (in_stream.is_open()) {  //if the stream is open 

     getline(in_stream, key); 

     cout << "Testing: " << key << endl; 

     while(!in_stream.eof()) { 
      i++; 
      in_stream >> first_name[i] >> last_name[i] >> answers[i]; 
     } 
    } 
    cout << first_name[1] << " " << last_name[1] << " " << answers[1] << endl; 
    in_stream.close(); 
} 
+1

如果您需要在數據線,你應該使用'getline'閱讀。 – NathanOliver

+0

'in_stream >> answer_key [i];'試圖從文件中讀取數字。這真的是故意的嗎? –

+0

'getline'用於抓取整條線。之後,您可以遍歷它以提取答案鍵的所有字符。 – AndyG

回答

0

啓動程序,你可以簡單地讀取第一行這樣

void get_answer_key_array(ifstream &in_stream, char *answer_key, int &count) { 

    in_stream >> answer_key; 
    count = strlen(answer_key); 
} 

answer_key數組必須是char類型。

而且底線字符爲「\ n」而不是「/ N」

+0

_「answer_key數組必須是char類型。」_我寧願提出一個'std :: string'。 –

+0

我已經改變了這部分的結構之前,評論,希望最好的? – Logan