如何把EOF(档案结尾)放入code :: blocks?
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{
int grade,
aCount = 0,
bCount = 0,
cCount = 0,
dCount = 0,
fCount = 0;
cout << "Enter the letter grades." << endl
<< "Enter the EOF character to end input." << endl;
while ((grade = cin.get()) != EOF) {
switch (grade) {
case 'A':
case 'a':
++aCount;
break;
case 'B':
case 'b':
++bCount;
break;
case 'C':
case 'c':
++cCount;
break;
case 'D':
case 'd':
++dCount;
break;
case 'F':
case 'f':
++fCount;
break;
case '\n':
case '\t':
case ' ':
break;
default:
cout << "Incorrect letter grade entered."
<< " Enter a new grade." << endl;
break;
}
}
cout << "\n\nTotal for each letter grade are:"
<< "\nA: " << aCount
<< "\nB: " << bCount
<< "\nC: " << cCount
<< "\nD: " << dCount
<< "\nF: " << fCount << endl;
return 0;
}
我构建并运行此代码,并在第19行说明“EOF尚未声明”,即带有while标头的行。我一个一个地输入了确切的代码。如何把EOF(档案结尾)放入code :: blocks?
while ((grade = cin.get()) != EOF) {
在上面的行中,您只是将等级作为输入。 EOF也应该有一个cin.get()
,除非它不起作用。 当你这样做时,你需要首先声明EOF为char,如上面的行中比较是在两个字符之间。
EOF应该表示文件结束。将它作为输入是没有意义的。 –
应该有一个文件在C++中开始,因为没有文件流或文件声明eof应该充当char而不是文件结尾。 – Mayank
标准输入是cin引用的内容,就像C++中的文件一样,即使它不是常规的磁盘文件。 –
EOF
宏在cstdio
中定义,但通常使用C++风格的IO比C风格的IO更好。而不是检查返回值以查看它是否为EOF
,最好检查cin.eofbit
(或者,因为其他问题是可能的,cin.failbit
)。您可以通过尝试将其评估为bool
来检查流的failbit
,如下所示。
如果您更换一个for循环while循环,因为
for (char grade = cin.get(); cin; grade = cin.get()) {
它应该更好地工作(在这种情况下,你也应该摆脱最初grade
声明,因为它是在环仅用于并应在那里宣布)。
编辑:
这可以进一步简化。 get
方法支持传入字符引用,因此您可以拨打cin.get(grade)
而不是grade = cin.get()
。这样做的好处是,当传递字符引用时,get
会返回流的副本,因此您可以同时执行读取和检查状态。使用这种方法,你需要提前申报grade
,但环可以
while (cin.get(grade)) {
你可以更进一步,到达通常的C++输入循环while(cin.get(grade)){...' – Cubbi
哦,你是对的。我没有在while中逐字符输入。 –
开始这有什么好做的代码:: Blocks的 –
http://stackoverflow.com/help/on-topic“问题要求我们推荐或找到一本书,工具,**软件库**,教程或其他非现场资源,都是针对堆栈溢出的话题......“[**重点**添加] –
'while( = cin.get())!= EOF)'告诉我你在哪里学习/阅读,这是如何使用C++ I/O流? –