我的QTextStream的输入和输出不起作用
所使用的IDE: QT Creator 19.0.2
我一直在按照这个YouTube视频学习如何在QT中进行输入输出。照着视频把代码写好、运行后,理论上应该先打印出“请输入你的名字:”,然后你输入你的名字;但实际却一次性把所有输出流输出完毕。因此它输出的是:
请输入你的名字:
你输入的是:
请输入你的年龄:
你输入的不是一个有效数字!!!!!!
这似乎是缓冲区的问题。但我已经严格按照视频逐字执行,结果仍然这样。我使用QT版本6.10.3,视频是五年前的,因此现在可能有更新导致实现方式不同。
这是我的代码:
#include <QCoreApplication>
#include <QTextStream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//---- QTextStream
QTextStream qin(stdin);
QTextStream qout(stdout);
//--- Output
qout << "Enter your name: " << Qt::endl;
//--- Reading
QString name = qin.readLine();
//--- Flushing
qout << "You entered: " << name << "\n";
qout << "Enter your age:\n";
qout.flush();
bool ok;
int age = qin.readLine().toInt(&ok);
if(ok)
{
qout << "You are " << age << " years old";
}
else
{
qout << "You have failed to enter a valid number!!!!!!!";
}
qout.flush();
return a.exec();
}
我甚至在一个新项目文件夹里做了测试,该文件夹里只有 main.cpp 和 mainwindow.cpp 以及mainwindow的头文件。
更新:我查看了本地变量窗格,想看看具体情况。对于name,它显示为不可访问。下面是相关截图:
更新2:我通过命令提示符运行可执行文件,结果没有任何输出,不过在任务管理器中可以看到程序正在运行。我运行该可执行文件时的文件层级结构如下:
C:\Users\Vince\Desktop\Coding\QTProjectFiles\IOtest\
└── build\
└── Desktop_Qt_6_11_1_MinGW_64_bit-Debug\
└── IOtest.exe
解决方案
#include <QTextStream>
int main()
{
QTextStream qin(stdin);
QTextStream qout(stdout);
qout << "Enter your name: " << Qt::flush;
QString name = qin.readLine();
qout << "You entered: " << name << "\n" << Qt::flush;
qout << "Enter your age: " << Qt::flush;
bool ok;
int age = qin.readLine().toInt(&ok);
if (ok)
qout << "You are " << age << " years old\n" << Qt::flush;
else
qout << "You have failed to enter a valid number!!!!!!!\n" << Qt::flush;
return 0;
}
问题出在哪里?
原本的代码使用 Qt::endl,它会添加换行,但并不总是能立即刷新输出缓冲区。这会导致所有输出一次性显示,而不是等待用户输入。
为什么这个修复有效?
使用 Qt::flush 可以在 qin.readLine() 等待输入之前,确保输出会立即发送到终端。这样每个提示都会在用户输入之前正确显示。
另外移除了 QCoreApplication 和 a.exec(),因为简单的控制台I/O不需要事件循环。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
