我是C++的新手,而且我很難執行lynda.com教師給出的這個練習。逐行讀取文件並寫入C++數組
我應該創建一個txt
文件,其中包含文字。我們使用ifstream
逐行讀取並將字符串存儲到字符串數組中。 (注:此任務有哪些是無關緊要的,以我的問題的其他部分。)
所以,我有三個問題:
當我運行由導師給出的解決方案,但它可以編譯和運行它有EXC_BAD_ACCESS。
這裏是她的代碼:
#include <iostream> #include <cstdlib> #include <ctime> #include <cstring> #include <fstream> using namespace std; string getRandomReply(string [], int); int main() { ifstream inputfile; // Declare an input file inputfile.open("replies.txt", ios::in); char answer[30]; string answers[20]; int pos = 0; // Read from the file until end of file (eof) while (!inputfile.eof()) { inputfile.getline(answer, 30); answers[pos] = answer; pos++; } cout << "Think of a question for the fortune teller, " "\npress enter for the answer " << endl; cin.ignore(); cout << getRandomReply(answers, 20) << endl; return 0; } string getRandomReply(string replies[], int size) { srand(time(0)); int randomNum = rand()%20; return replies[randomNum]; }
即使這個方案是功能性的,我不明白,需要創造的char [],並通過它來分配值到字符串數組。
我在做練習時編寫了自己的代碼,它編譯並運行,但返回空白行。
#include <iostream> #include <cstdlib> #include <ctime> #include <cstring> #include <fstream> int main(int argc, const char * argv[]) { std::ifstream inputfile; inputfile.open("replies.txt", std::ios::in); std::string answers[20]; int pos = 0; // Read from the file until end of file (eof) while (inputfile.good()) { getline(inputfile, answers[pos], '\n'); pos++; } for (int i=0; i<20; i++) { std::cout << answers[i] << std::endl; } /* srand(time(0)); std::cout << "Think of a question that you would like to ask fortune teller." << std::endl; int ranNum = rand()%20; std::string answer = answers[ranNum]; std::cout << answer << std::endl; */ return 0; }
[不要使用while while(!inputfile.eof())'](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – NathanOliver
如果getline失敗,仍然會增加pos。你從不在第二個循環中使用計算的pos。而不是原始數組使用std :: vector - 你可以調用push_back,它會隨着你讀取你的文件而增長 –
我相信逐行調試你的代碼,檢查發生了什麼會更好地爲你服務,而不是問這樣一個問題在堆棧溢出。 – user0042