从文件 C++ 中读取(逐行 - 混合变量)
Reading from a file C++ (Line by line - mixed variables)
这里是编码新手。 C++ 是我的第一语言。如果可能,请包括一些解释。
我必须从包含混合变量的文件中读取行。我目前面临 2 个问题:
循环输入语句以便我可以读取所有行。我只能使用以下代码来执行循环:
while(inputFile.peek() != EOF)
我知道这应该检查下一个字符,如果它的 EndOfFile 将打破循环,但我无法让它工作。
读取一个以 bool 开头的字符串(跳过空格)。要跳过空格,我应该使用:
while(inputFile.peek() == ' ')
inputFile.get();
文件内容如下:
Car CN 819481 maintenance false NONE
Car SLSF 46871 business true Memphis
Car AOK 156 tender true McAlester
我的代码如下。我省略了 main()
函数,因为它唯一做的就是调用 input()
.
#include <iostream> //used in main()
#include <iomanip>
#include <string>
#include <fstream> //to work with file
#include <cstdlib> //for exit() function
using namespace std;
void input(){
ifstream inputFile;
string type, rMark, kind, destination;
int cNumber;
bool loaded;
inputFile.open("C:\My Folder\myFile.txt"); //open file
if (!inputFile){
cerr << "File failed to open.\n";
exit(1);
}
//read file contents
while(inputFile.peek() != EOF){
//initially I had >>destination in the statement below as well
//but that gave me the same results.
inputFile >> type >> rMark >> cNumber >> kind >> loaded;
//skip whitespace
while(inputFile.peek() == ' '){
inputFile.get();
}
//get final string
getline(inputFile, destination);
cout << type << " " << rMark << " " << cNumber << " " << kind << " ";
cout << boolalpha << loaded << " " << destination << endl;
}
inputFile.close(); //close file
} //end input()
在运行程序之后我得到:
Car CN 819481 maintenance false
所以第一行被读取直到 bool 值(并且最后一个字符串被省略),并且循环不起作用(或者它正在读取它不应该读取的东西?)。我试过移动 .peek() 和 .gets() 但没有任何组合起作用。
提前致谢!
您需要在输入语句中使用 std:boolalpha
,就像您对输出所做的那样:
inputFile >> type >> rMark >> cNumber >> kind >> boolalpha >> loaded;
否则,C++ 期望在读取布尔变量时看到“0”或“1”,而不是 'false' 或 'true'。
这里是编码新手。 C++ 是我的第一语言。如果可能,请包括一些解释。
我必须从包含混合变量的文件中读取行。我目前面临 2 个问题:
循环输入语句以便我可以读取所有行。我只能使用以下代码来执行循环:
while(inputFile.peek() != EOF)
我知道这应该检查下一个字符,如果它的 EndOfFile 将打破循环,但我无法让它工作。
读取一个以 bool 开头的字符串(跳过空格)。要跳过空格,我应该使用:
while(inputFile.peek() == ' ') inputFile.get();
文件内容如下:
Car CN 819481 maintenance false NONE
Car SLSF 46871 business true Memphis
Car AOK 156 tender true McAlester
我的代码如下。我省略了 main()
函数,因为它唯一做的就是调用 input()
.
#include <iostream> //used in main()
#include <iomanip>
#include <string>
#include <fstream> //to work with file
#include <cstdlib> //for exit() function
using namespace std;
void input(){
ifstream inputFile;
string type, rMark, kind, destination;
int cNumber;
bool loaded;
inputFile.open("C:\My Folder\myFile.txt"); //open file
if (!inputFile){
cerr << "File failed to open.\n";
exit(1);
}
//read file contents
while(inputFile.peek() != EOF){
//initially I had >>destination in the statement below as well
//but that gave me the same results.
inputFile >> type >> rMark >> cNumber >> kind >> loaded;
//skip whitespace
while(inputFile.peek() == ' '){
inputFile.get();
}
//get final string
getline(inputFile, destination);
cout << type << " " << rMark << " " << cNumber << " " << kind << " ";
cout << boolalpha << loaded << " " << destination << endl;
}
inputFile.close(); //close file
} //end input()
在运行程序之后我得到:
Car CN 819481 maintenance false
所以第一行被读取直到 bool 值(并且最后一个字符串被省略),并且循环不起作用(或者它正在读取它不应该读取的东西?)。我试过移动 .peek() 和 .gets() 但没有任何组合起作用。
提前致谢!
您需要在输入语句中使用 std:boolalpha
,就像您对输出所做的那样:
inputFile >> type >> rMark >> cNumber >> kind >> boolalpha >> loaded;
否则,C++ 期望在读取布尔变量时看到“0”或“1”,而不是 'false' 或 'true'。