这是我在stackoverflow上的第一篇文章,所以如果我做错了,请告诉我。下周三我要参加 C++ 入门编程的期末考试,我无法检查我对教授练习题的回答。我主要关心在将输入文件的内容复制到输出文件之前检查输入文件是否为空。此外,从输入文件中获取字符。这是下面的问题和我的代码:
假设我们有以下枚举类型来列出可能的文件 I/O 错误:
enum FileError {
NoFileError, // no error detected
OpenInputError, // error opening file for input
OpenOutputError, // error opening file for output
UnexpectedFileEnd, // reached end-of-file at unexpected spot in program
EmptyFileError, // file contained no data
};
为以下三个文件处理例程提供适当的实现:
FileError OpenInputFile(ifstream& infile, char *filename);
// open the named file for input, and return the opening status
FileError OpenOutputFile(ofstream& outfile, char *filename);
// open the named file for output, and return the opening status
FileError CopyNChars(ifstream& infile, ofstream& outfile, int NumChars);
// check to ensure the two files are open,
// then copy NumChars characters from the input file to the output file
现在我主要关心这里列出的最后一个函数。这是我的代码:
FileError CopyNChars(ifstream& infile, ofstream& outfile, int NumChars){
char c;
if (!infile.is_open()) return 1;
if (!outfile.is_open()) return 2;
if ((infile.peek()) == -1) return 4; //This right? (I'm using linux with g++ compiler.
// Also, can I return ints for enum types?
for (int i = 0; i < NumChars; i++){
if (infile.eof()) return 3;
else {
infile.get(c); //Is this the way to do this? Or is there another recommendation?
outfile << c;
}
}
}
在阅读之前,我已经查看了各种检查 EOF 的方法,但我还没有找到 -1 或 EOF 是有效检查的具体答案(类似于 NULL???)。我认为这只是我对术语的不熟悉,因为我查看了文档,但找不到这种检查的示例。我在这里正确地进行空文件检查吗?我没有编写驱动程序来测试此代码。另外,我担心我正在使用的 get 方法。在这种情况下是否有其他选择,以及一次获得一个角色的最佳方法是什么。最后,我是否可以提出关于堆栈溢出的推测性问题(例如“有哪些获取方法以及在这种情况下最好的方法是什么?”)。感谢您的时间和考虑。