Qt 获取用户';s通过getline函数从终端输入并将其写入文件

Qt 获取用户';s通过getline函数从终端输入并将其写入文件,qt,getline,qfile,Qt,Getline,Qfile,使用console,我想通过wFile函数中的getline函数将所需的用户输入写入一个文件,然后读取它。我在运行时遇到逻辑错误;作为用户写入的任何内容都不会输入到输出终端,并且不会成功执行更多步骤。显然,fwrite函数在库中具有此功能,但我希望以不同的方式编写自己的代码。我想我一定忽略了一点。代码如下: #include <QCoreApplication> #include <QDebug> #include <QFile> #include <Q

使用console,我想通过wFile函数中的getline函数将所需的用户输入写入一个文件,然后读取它。我在运行时遇到逻辑错误;作为用户写入的任何内容都不会输入到输出终端,并且不会成功执行更多步骤。显然,fwrite函数在库中具有此功能,但我希望以不同的方式编写自己的代码。我想我一定忽略了一点。代码如下:

#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QString>
#include <QTextStream>
#include <String>
#include <cstdlib>
using namespace std;

void wFile(QString Filename)
{
QFile  mFile(Filename);
QTextStream str(&mFile);
qDebug() << "what do you want to write in the desired file: ";
istream& getline (istream& is, string& str);
if (!mFile.open(QFile::WriteOnly  | QFile::Text))
{
    qDebug() << "could not open the file";
    return;
}
mFile.flush();
mFile.close();
}

void read (QString Filename){
QFile nFile(Filename);

if(!nFile.open(QFile::ReadOnly | QFile::Text))
 {
     qDebug() << "could not open file for reading";
     return;
 }
QTextStream in(&nFile);
QString nText = in.readAll();
qDebug() << nText;
nFile.close();
}

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString nFilename ="P:/DocumentArminV.txt";
wFile(nFilename);
read(nFilename);
return a.exec();
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
void wFile(QString文件名)
{
QFile-mFile(文件名);
QTextStream str(&mFile);

qDebug()扰流板警报:在回答的最后,有一个非常简单的修复建议

你做了什么 关于
istream&getline(istream&is,string&str);
wFile(QString文件名)
中:

这在函数
wFile()
中声明函数
getline()

> P>这是一个关于C++的有效声明。

  • 关于示例代码,我错过了相应的标题。IMHO,
    #包括

    #包括

    需要进行此编译。
    但是,现有的
    #include
    可能会间接包含它们。因此,OP的代码甚至可以在没有它们的情况下编译

  • 声明未使用的函数以及重新声明已声明的函数在某种程度上是无用的,但不是错误的

  • 为了证明这一点,我制作了一个小样本:

    #include <cstdio>
    #include <istream>
    #include <string>
    
    void func()
    {
      puts("in func()\n");
      std::istream& getline(std::istream&, std::string&);
      // Even duplicated prototyping is accepted without complaints:
      std::istream& getline(std::istream&, std::string&);
    }
    
    int main () 
    {
      func();
      return 0;
    }
    

    OP(可能)想要什么 使用console,我希望通过wFile函数中的getline函数将所需的用户输入写入一个文件,然后读取它

    这听起来有点让我困惑。
    std::getline(std::cin,)
    可用于从控制台读取用户输入。可能是,这只是一个有点糟糕的措辞

    假设OP想要从控制台读取输入,显然,声明函数是不够的——必须调用它才能生效:

    #include <iostream>
    
    void func()
    {
      std::cout << "Enter file name: ";
      std::string fileName; std::getline(std::cin, fileName);
      std::cout << "Got file name '" << fileName << "'\n");
    }
    
    int main () 
    {
      func();
      return 0;
    }
    
    解码/显示

    • u
    根据
    std::string
    的字符类型,无法确定编码。因此,必须提供额外提示以正确解码

    (好吧,这与
    std::wstring
    wchar\u t
    类似)

    存储一系列字符。因此,设计人员选择了一种通用编码来减轻“编码地狱”

    只要程序在
    QString
    上运行,就不会出现编码问题。将
    QString
    与Qt的其他功能组合时也是如此。但是,当“离开Qt世界”时,它会变得有点复杂,例如将
    std::string
    的内容存储到
    QString

    在这一点上,程序员必须为
    std::string
    QString
    中的内容编码提供额外的提示,提供大量的
    从…()
    到…()
    可用于重新编码内容的方法,但应用程序程序员仍有责任选择正确的方法

    假设
    文本
    的预期内容应该是
    u
    (即UTF-8编码),可以通过以下方式将其转换为
    QString
    (并返回):


    当来自
    std::cin
    的输入应传递到
    QString
    时,必须考虑这一点:

    std::cout << "Enter file name: ";
    std::string input; std::getline(std::cin, input);
    QString qFileName = QString::fromLocal8Bit(input);
    

    我必须承认,我从来没有自己做过,但在Qt论坛上发现了这一点:。

    istream&getline(istream&is,string&str)< C++ >在这个作用域内放置函数声明是正确的吗?亲爱的@ JohnLaw,我不完全确定将GETLIN函数的声明放在那个范围内是否合适。我自己不是专家,但我从来没有见过这样的东西。如果你使用<代码> GETLION>代码>,直接通过<代码> ISRADAM。
    std::string
    接收输入(例如
    getline(std::cin,strBuff);
    。然后可能将strBuff写入qTextStream。亲爱的@JohnLaw,它会出现“cin不是std的成员”错误。我已经尝试写入strBuff(或我的“str”缓冲变量)进入wFile函数代码内的QTextStream。getline(std::istream&,QTextStream&)没有重载。
    。请检查并至少对如何使用它做一些初步研究()亲爱的@Scheff!这是一个多么全面的完美答案!非常感谢。我理解我的错误,我只是把Qt自由主义和std混为一谈。我把它标记为完美答案:)
    // std::string (UTF-8) -> QString
    std::string text = "\xc3\xbc";
    QString qText = QString::fromUtf8(text.c_str());
    // QString -> std::string (UTF-8)
    std::string text2 = qText.toUtf8();
    
    std::cout << "Enter file name: ";
    std::string input; std::getline(std::cin, input);
    QString qFileName = QString::fromLocal8Bit(input);
    
    QTextStream qtin(stdin);
    qtin.readline();