C++ 用c++;

C++ 用c++;,c++,file,C++,File,当我运行此代码时,第二个和第三个文件的名称第一个字符消失 例如,如果我将第二个文件命名为set2.txt,它将是et2.txt #include <iostream> #include <fstream> using namespace std; int main() { fstream set1,set2,set3; string name; cout<<"Enter set1 name: ";

当我运行此代码时,第二个和第三个文件的名称第一个字符消失 例如,如果我将第二个文件命名为set2.txt,它将是et2.txt

#include <iostream>
#include <fstream>
using namespace std;
int main()
{

        fstream set1,set2,set3;
        string name;
        cout<<"Enter set1 name: ";
        cin.ignore();
        getline(cin , name);
        set1.open(name,ios::out);
        cout<<"Enter set2 name: ";
        cin.ignore();
        getline(cin , name);
        set2.open(name,ios::out);
        cout<<"Enter set3 name: ";
        cin.ignore();
        getline(cin , name);
        set3.open(name,ios::out); 
    }
#包括
#包括
使用名称空间std;
int main()
{
fstream set1、set2、set3;
字符串名;
库特
第一个字符消失了

这是因为忽略了行中的第一个字符

cin.ignore();
在阅读之前,请先用

getline(cin , name);
这两行的顺序不对,应该是这样的

getline(cin , name);
cin.ignore();
cin.ignore()
此处的目的是在使用
getline()
读取一行文本后,从输入流中删除换行符

第一个字符消失了

这是因为忽略了行中的第一个字符

cin.ignore();
在阅读之前,请先用

getline(cin , name);
这两行的顺序不对,应该是这样的

getline(cin , name);
cin.ignore();

cin.ignore()
此处的目的是在使用
getline()读取一行文本后,从输入流中删除换行符

请阅读什么是
调试器
,如何激活它,以及如何在IDE中使用它来单步遍历代码。学习如何使用调试器的最佳时机。@MarcinOrlowski调试器在这里有什么帮助?如果不真正阅读它,几乎不可能看到stdin中有什么可用的输入…OP已经在做了。确保它是如果是这样,您将能够在代码的每个步骤中看到每个变量所包含的内容。@MarcinOrlowski OP清楚地知道相关变量的内容,但不理解它们为什么包含这些内容。要用调试器解决这一问题,需要检查名为
cin
的变量的内容,但这并没有帮助对于初学者来说,这是非常有用的。请阅读什么是
debugger
,如何激活它,以及如何在IDE中使用它来单步遍历代码。学习如何使用调试器的最佳时机。@MarcinOrlowski调试器在这里有什么帮助?如果不真正阅读它,几乎不可能看到stdin中有什么可用的输入……而OP已经在做了。Su这样,您就可以在代码的每个步骤中看到每个变量都包含哪些内容。@MarcinOrlowski OP清楚地知道有问题的变量的内容,但不明白它们为什么包含这些内容。要用调试器解决这个问题,需要检查名为
cin
的变量的内容,但这并不准确这对初学者很有帮助。实际上,对于DOS行结尾的文件,您只需要
cin.ignore()
,因为它们由两个字符组成。
getline()
将读取并丢弃终止输入行的换行符,但只读取一个换行符。因此,在DOS上需要额外的代码来丢弃额外的字符,而在UNIX上则不需要。实际上,对于具有DOS行结尾的文件,您只需要
cin.ignore()
,因为这些文件由两个字符组成。
getline()
将读取并丢弃终止输入行的换行符,但只读取一个换行符。因此,在DOS上需要额外的代码来丢弃额外的字符,而在UNIX上则不需要。