目前,我有一个程序可以从文本输入文件中读取,该文件应采用以下格式:
add A B
add A C
add B D
breadth A
depth A
remove A B
add B A
breadth B
depth B
但是,我写的程序是:
int main(int argc, char **argv){
ifstream fin(argv[1]);
string cmnd;
char v1, v2;
while (fin >> cmnd >> v1 >> v2){
if (cmnd == "add"){
//do something
}
if (cmnd == "remove"){
//do something
}
if (cmnd == "breadth"){
//do something
}
if (cmnd == "depth"){
//do something
}
}
当然,当它到达文本文件中只有两个变量的行时结束,例如“广度A”或“深度A”。有人很快就亲自向我建议我可以添加第二个嵌套while循环来获取读数和深度来解决这个问题,但我没有遵循。变量只会是两个或三个。任何帮助表示赞赏!
答案 0 :(得分:1)
问题在于空白。请记住,换行符也是空格。要查看出现了什么问题,请将所有换行符转换为空格并遍历该程序。在您阅读breadth A
时,您的变量将包含以下内容:
cmnd="breadth"
v1='A'
v2='d' // from depth
这是一个框架错误。由于您使用换行符终止了可选输入,因此您可以查看istream::getline()
。
答案 1 :(得分:1)
我设法解决了以下问题:
int main(int argc, char **argv){
ifstream fin(argv[1]);
string cmnd;
char v1, v2;
while (fin >> cmnd){
if (cmnd == "add"){
(fin >> v1 >> v2);
//do something
}
if (cmnd == "breadth"){
(fin >> v1);
//etc...
}
}