C++ 从文本文件读取并保存为两个或三个变量

C++ 从文本文件读取并保存为两个或三个变量,c++,input,C++,Input,目前,我有一个程序,可以读取预期格式为以下格式的文本输入文件: 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 (f

目前,我有一个程序,可以读取预期格式为以下格式的文本输入文件:

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循环,用于readth和depth来修复这个问题,但我没有遵循。变量只有两个或三个。感谢您的帮助

问题在于空格。请记住,换行符也是空白。若要查看出了什么问题,请将所有换行符转换为空格,然后遍历程序。在读取宽度A时,变量将包含以下内容:

cmnd="breadth"
v1='A'
v2='d' // from depth

这是一个帧错误。由于可选输入以换行符结尾,您可以查看
istream::getline()

问题在于空格。请记住,换行符也是空白。若要查看出了什么问题,请将所有换行符转换为空格,然后遍历程序。在读取宽度A时,变量将包含以下内容:

cmnd="breadth"
v1='A'
v2='d' // from depth

这是一个帧错误。由于您有以换行符结尾的可选输入,您可以查看
istream::getline()

我设法解决了以下问题:

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...
                 }

}

我设法找到了如下工作:

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...
                 }

}