如何在C++中将文件作为参数传递
How can i pass a file as a parameter in C++?
我想做的基本上是写一个函数,它以一个参数作为文件名,如果有多个文件,它只会以文件名作为参数,它应该用一个函数重复这样做。我该怎么做?谢谢
Txt文件如下例如,sorular.txt:
//世界上最拥挤的国家是什么
//中国
//美国
//德国
//澳大利亚
//中国
int main (){
string array [5];
string line;
string answer;
static int trueCount = 0;
static int falseCount = 0;
ifstream file("/Users/User/QuizMaker/Quiz Maker V2/sorular.txt");
if(file.is_open()){
cout << "Questions are loading... Please wait.."<<endl<<" ."<<endl<<" ."<<endl<<" ."<<endl;
while (!file.eof()) {
for (int i = 0; i<6; i++) {
getline(file,array[i]);
}
for (int a = 0; a<5; a++) {
cout << array[a] << endl;
}
cin >> answer;
if(answer == "C" || answer == "c") {
cout << true;
trueCount++;
}
else falseCount++;
}
cout << "You answered "<<trueCount << " questions as true" << endl;
cout << "You answered "<<falseCount << " questions as false" << endl;
file.close();
} else cout << " not ıoen";
cin.get();
return 0;
}
首先让我说,array
不能容纳元素0
、1
、2
、3
、4
和5
。它只分配了5个元素。
这可能会让你的视野有所开阔,但我认为正确的解决方案是在这里上课。所以我要一起解决这个问题,如果你感兴趣,你可以研究一下我做了什么,如果你不明白,可以在评论中提问。
class foo : public iterator<input_iterator_tag, string> {
const initializer_list<const char*> _files;
decltype(_files)::const_iterator _filesIt;
ifstream _file;
string _line;
void get() {
string array[6];
auto i = begin(array);
while (i != end(array) && getline(_file, *i)) {
advance(i, 1);
}
if (i == end(array)) {
_line = accumulate(cbegin(array), cend(array), string(), [](const auto& a, const auto& b) { return a.empty() ? b : a + 'n' + b; });
} else if(++_filesIt != cend(_files)) {
_file.close();
_file.open(*_filesIt);
get();
}
}
public:
foo() : _filesIt(cend(_files)) {}
foo(foo& rhs) : _files(rhs._files), _filesIt(next(cbegin(_files), distance(cbegin(rhs._files), rhs._filesIt))), _line(rhs._line) {
if (_filesIt != cend(_files)) {
_file.open(*_filesIt);
_file.seekg(rhs._file.tellg());
}
}
foo(const initializer_list<const char*>&& files) : _files(files), _filesIt(cbegin(_files)), _file(*_filesIt) { get(); }
const string& operator*() const { return _line; }
const foo& operator++() {
get();
return *this;
}
const foo operator++(int) {
foo result;
get();
return result;
}
bool operator==(const foo& rhs) { return distance(_filesIt, cend(_files)) == distance(rhs._filesIt, cend(rhs._files)); }
bool operator!=(const foo& rhs) { return distance(_filesIt, cend(_files)) != distance(rhs._filesIt, cend(rhs._files)); }
};
尽管这门课看起来很难应付,但它极大地简化了你要做的其他事情。有了这个类,你的代码的其余部分将阅读:
auto true_count = 0;
auto false_count = 0;
for_each(foo({"/Users/User/QuizMaker/Quiz Maker V2/sorular.txt", "foo.txt", "bar.txt"}), foo(), [&](const auto& i) {
string answer;
cout << i << endl;
cin >> answer;
if(answer == "C" || answer == "c") {
cout << 1;
true_count++;
} else {
false_count++;
}
});
cout << "You answered "<< trueCount << " questions as true" << endl << "You answered " << falseCount << " questions as false" << endl;
相关文章:
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何使用输入参数作为文件的传递?
- 如果作为参数传递,请打开文件,否则打开主应用菜单
- 将文件的内容作为参数传递到C 程序中
- 如何将.txt文件作为不同 cpp 中函数的参数传递
- 将文本文件而不是用户输入作为命令行参数传递
- 为在应用程序中作为函数参数传递的文件运行'iconv'命令C++
- 使用 php 将带有命令行可执行文件路径的参数传递
- Xcode 不会将参数传递给可执行文件C++
- 将标头中定义的 MyClass 作为函数参数传递给其他文件
- 如何在C++中将文件作为参数传递
- C++:如何将参数传递给可执行文件
- 如何将通用文件流作为参数传递
- 如何在 c++ 中将数据文件作为参数传递到函数中
- 如何读取名称(仅文件.txt)作为参数传递的文件(在任何目录中)?C++
- C++ 将文件 * 作为参数传递给函数
- 如何在将函数作为参数传递给文件中.cpp函数模板时声明
- 将文件的每一行作为命令行参数传递给二进制文件
- 在C++中将webM文件作为参数传递
- 试图将指针作为参数传递给指向文件的fstream成员