2015-12-21 65 views
0

我已阅读“可能已经有你的答案的问题”的答案,但它没有帮助我。写入文件,编译,创建文件,但不写

我想我的问题有一个快速的解决方案。

我想写其中

  1. 用户输入他们想要创建的文件名的程序。

然后

  • 在同一行他们输入的整数量=新创建的txt文件的文本的行数。

  • 在新行中,用户输入文本的第一行,在新行中输入下一行,等等。

  • 并将所有这些行保存到创建的文件中。

  • 例如file.txt 3

    bhjudshsu 565 jdd 
    hcxjs 
    jdckisa jsdjs 
    

    开放名为file.txt我应该看到上述三行的文本文件之后。

    这里是我的代码示例:

    #include<iostream> 
    #include<string> 
    #include<fstream> 
    
    using namespace std; 
    
    int main() 
    { 
        int amount; 
        string fileName, line; 
    
        ofstream start; 
    
        cin>>fileName>>amount; 
    
        ofstream out(fileName.c_str()); 
    
        for(int i=0; i<amount; i++) 
        { 
         getline(cin, line); 
         start<<line<<endl;  
        } 
        start.flush(); 
        start.close(); 
    
        return 0; 
    } 
    

    的问题是,该文件被创建,但它是空的。

    此外,如果我输入file.txt 3程序关闭后,我只输入两行。

    你能告诉我我做错了什么吗?

    +0

    我投票关闭这一问题作为题外话,因为它涉及到一个简单的和不寻常的编码错误,不太可能帮助未来的读者。 – Beta

    +0

    两个注意事项:1)流输入('cin >> ...')和'getline'不能很好地协同工作,所以你必须做出让步,2)最好是独立开发新的功能*尽可能 - 你应该得到**用户输入**和**文件输出**完美工作,然后再尝试合并它们。 – Beta

    回答

    1

    除了Beta的回答,cin >>会在用户按下回车键时在缓冲区中留下换行符。 getline()读取此用户已按下输入以“跳过”输入。

    在使用getline()之前,可以使用cin.ignore()去除这些额外的字符。

    #include<iostream> 
    #include<string> 
    #include<fstream> 
    
    using namespace std; 
    
    int main() 
    { 
        int amount; 
        string fileName, line; 
        cin >> fileName >> amount; 
        ofstream start(fileName.c_str()); 
    
        for(int i = 0; i < amount; i++) 
        { 
         cin.ignore(); 
         getline(cin, line); 
         start << line << endl; 
        } 
    
        start.flush(); 
        start.close(); 
        return 0; 
    } 
    
    +1

    是的,实际上,在开始纠正之后,我仍然只能输入两行 – Bilbo

    +0

    只有在添加cin.ignore()之后;一切都很好。谢谢! – Bilbo

    3

    你有两个ostreams,startout。您将out附加到文件(并且不写任何内容),并写入start(不附加任何内容)。