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