一个简单的Qt Console Application计算练习程序
初步体验Qt Creator
用途:练习20以内2位数乘法速算的程序
功能1:支持用户设定题目数量
std::cout << "请输入本次练习题目数量:";int numProblems = 0;std::string num;std::cin >> num;try {numProblems = std::stoi(num);MathQuiz quiz(numProblems);quiz.runQuiz();} catch (const std::invalid_argument& e) {std::cerr << "请输入合法的整数结果!\n";continue;}
功能2:支持随机生成期望数量的题目
void MathQuiz::generateProblems() {for (int i = 0; i < numProblems; i++) {int randomValue1 = generateRandomValue();int randomValue2 = generateRandomValue();problems.emplace_back(randomValue1, randomValue2);}
}int MathQuiz::generateRandomValue() { return randomGenerator.bounded(10, 21); }
功能3:支持判断用户输入结果的准确性
bool MathQuiz::promptAndCheckAnswer(int value1, int value2, int index) {std::cout << std::format("{}-{} 请计算:{}×{}=", index, numProblems, value2,value1);std::string str;int result = 0;std::cin >> str;try {result = std::stoi(str);} catch (const std::invalid_argument& e) {std::cerr << "请输入合法的整数结果!\n";}return result == value2 * value1;
}
功能4:循环出题,并支持记录计算错误的题目
std::map<int, std::string> incorrectProblems;for (int i = 0; i < numProblems; i++) {const auto& problem = problems[i];bool correct = false;while (!correct) {correct = promptAndCheckAnswer(problem.first, problem.second, i + 1);if (!correct) {std::cout << "回答错误,请再试一次。\n";incorrectProblems.insert(std::pair<int, std::string>(i + 1, std::format("{}×{}", problem.first, problem.second)));} else {if (incorrectProblems.find(i + 1) == incorrectProblems.end()) {numCorrect++;}break;}}}
功能5:支持统计正确题目数、平均计算耗时和总计耗时
void MathQuiz::printResults(double elapsedTime) {double correctPercent = numCorrect * 100 / numProblems;QTextStream out(stdout);QString outstr =QString("共%2题,答对%1题,正确率:%3%,平均用时:%4秒,累计用时:%5秒。\n").arg(numCorrect).arg(numProblems).arg(correctPercent).arg(elapsedTime / numProblems).arg(elapsedTime);out << outstr;
}
程序结构:
main.cpp主程序
#include <windows.h>#include <QCoreApplication>
#include <iostream>#include "mathquiz.h"int main() {SetConsoleOutputCP(CP_UTF8);while (true) {std::cout << "请输入本次练习题目数量:";int numProblems = 0;std::string num;std::cin >> num;try {numProblems = std::stoi(num);MathQuiz quiz(numProblems);quiz.runQuiz();} catch (const std::invalid_argument& e) {std::cerr << "请输入合法的整数结果!\n";continue;}std::cout << "是否继续练习? (y/n):";std::string yn;std::cin >> yn;if (yn != "y" && yn != "Y") break;}return 0;
}
mathquiz.cpp,一个计算功能类
#include "mathquiz.h"#include <iostream>MathQuiz::MathQuiz(int numProblems) : numCorrect(0), numProblems(numProblems) {randomGenerator.seed(QTime::currentTime().msec());generateProblems();
}void MathQuiz::runQuiz() {QTime startTime = QTime::currentTime();std::map<int, std::string> incorrectProblems;for (int i = 0; i < numProblems; i++) {const auto& problem = problems[i];bool correct = false;while (!correct) {correct = promptAndCheckAnswer(problem.first, problem.second, i + 1);if (!correct) {std::cout << "回答错误,请再试一次。\n";incorrectProblems.insert(std::pair<int, std::string>(i + 1, std::format("{}×{}", problem.first, problem.second)));} else {if (incorrectProblems.find(i + 1) == incorrectProblems.end()) {numCorrect++;}break;}}}QTime endTime = QTime::currentTime();double elapsedTime = startTime.msecsTo(endTime) / 1000.0;printResults(elapsedTime);printIncorrectProblems(incorrectProblems);
}void MathQuiz::generateProblems() {for (int i = 0; i < numProblems; i++) {int randomValue1 = generateRandomValue();int randomValue2 = generateRandomValue();problems.emplace_back(randomValue1, randomValue2);}
}int MathQuiz::generateRandomValue() { return randomGenerator.bounded(10, 21); }bool MathQuiz::promptAndCheckAnswer(int value1, int value2, int index) {std::cout << std::format("{}-{} 请计算:{}×{}=", index, numProblems, value2,value1);std::string str;int result = 0;std::cin >> str;try {result = std::stoi(str);} catch (const std::invalid_argument& e) {std::cerr << "请输入合法的整数结果!\n";}return result == value2 * value1;
}void MathQuiz::printResults(double elapsedTime) {double correctPercent = numCorrect * 100 / numProblems;QTextStream out(stdout);QString outstr =QString("共%2题,答对%1题,正确率:%3%,平均用时:%4秒,累计用时:%5秒。\n").arg(numCorrect).arg(numProblems).arg(correctPercent).arg(elapsedTime / numProblems).arg(elapsedTime);out << outstr;
}void MathQuiz::printIncorrectProblems(const std::map<int, std::string>& incorrectProblems) {if (incorrectProblems.empty()) {return;}std::cout << "回答错误的题目:\n";int i = 1;for (const auto& it : incorrectProblems) {const auto& problem = problems[it.first - 1];std::cout << "题目 " << i << ": " << it.second << "="<< (problem.first * problem.second) << "\n";i++;}
}
mathquiz.h头文件
#ifndef MATHQUIZ_H
#define MATHQUIZ_H#include <QRandomGenerator>
#include <QTime>
#include <vector>class MathQuiz {public:MathQuiz(int numProblems);void runQuiz();private:void generateProblems();int generateRandomValue();bool promptAndCheckAnswer(int value1, int value2, int index);void printResults(double elapsedTime);void printIncorrectProblems(const std::map<int, std::string>& incorrectProblems);QRandomGenerator randomGenerator;int numCorrect;int numProblems;std::vector<std::pair<int, int>> problems;
};#endif // MATHQUIZ_H
运行效果

遇到问题总结:
Qt Creator编写Console程序,运行时没反应,应勾选下面选项
Qt Creator编写Console程序,汉字输出乱码
原因1:默认字符输出位置设置的值与Windows控制台默认字符集(GBK)不符
默认字符输出查看与修改

确定控制台窗口使用的编码格式:

原因2:文件编码格式与系统不兼容

原因3:部分库默认使用UTF-8,输出应转码,比如QTextStream
QTextStream out(stdout);
out.setEncoding (QStringConverter::System);
还有个方法,添加windows.h的引用,并在main开始时,添加:
SetConsoleOutputCP(CP_UTF8);
注意:将所有源代码以及系统文件编辑器默认编码均修改为UTF-8即可
相关文章:
一个简单的Qt Console Application计算练习程序
初步体验Qt Creator 用途:练习20以内2位数乘法速算的程序 功能1:支持用户设定题目数量 std::cout << "请输入本次练习题目数量:";int numProblems 0;std::string num;std::cin >> num;try {numProblems std::stoi(…...
windows文件拷贝给wsl2的Ubuntu
参考: windows文件如何直接拖拽到wsl中_win 移到文件到wsl-CSDN博客 cp -r /mnt/盘名/目标文件 要复制到wsl中的位置e.g.cp -r /mnt/d/byt5 /home Linux文件复制、移动、删除等操作命令_linux移动命令-CSDN博客 Linux 文件、文件夹的复制、移动、删除 - Be-myse…...
vivado 采用 SSI 器件进行设计
SSI 管脚的考虑因素 在为特定 SLR 中的组件规划管脚时,请将引脚放置在同一个 SLR 中。例如,将器件的 DNA 信息作为外部接口的一部分 时,请将该接口的引脚放置在 DNA_PORT 所在的主 SLR 中。其它考虑因素包括如下: • 把…...
Lua环境安装
软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 Lua是一种轻量级、小巧且易于嵌入应用程序的脚本语言,广泛用于游戏开发、Web开发、自动化脚本等领域。本文将详细介绍如何在不同操作系统上安装L…...
浏览器控制的无线开关
esp32-c3 作为HTTP server 控制led 灯。服务器注册两个uri 。一个"/open" 控制开,一个"/close"控制关。下一步再用一片c3作为客户端,运行http client 发送/open. /Close 模拟浏览器,控制led. 其实只要用手机或pc或平…...
Docker部署SSM项目及避坑指南
#又踩坑了,这里记录一下,以免日后忘记 前言:本来以为用docker部署个项目很轻松,嗯结果,又踩坑了,这里记录一个完整版。话不多说,开整。 第一步: 用docker拉取MySQL和Tomcat&#…...
多线程代码案例:单例模式/阻塞队列/线程池/定时器
案例一.单例模式 单例模式是一种设计模式;类似于棋谱,有固定套路,针对一些特定场景可以给出一些比较好的解决方案; 只要按照设计模式来写代码,就可以保证代码不会太差,保证了代码的下限; --------------------------------------------------------------------------------…...
Ruby CGI Cookie
Ruby CGI Cookie 在Web开发中,Cookie是一种常用的技术,用于在用户浏览器和服务器之间存储和传递信息。Ruby作为一种流行的编程语言,提供了CGI(Common Gateway Interface)库来处理Cookie。本文将详细介绍如何在Ruby中使用CGI库来创建、读取、修改和删除Cookie。 Cookie的…...
linux中取消anaconda默认使用base环境
在linux新安装anaconda之后,每次打开终端,总是显示正在使用默认anaconda中的base环境,如下如所示: 取消该默认设置,打开home目录下的.condarc文件,在末尾添加如下命令: auto_activate_base: fa…...
江门中微子到底是做什么的?
江门中微子实验是一项重要的大科学装置实验。以下是关于它的一些详细信息: 实验位置与建设深度:位于广东江门地下 700 米处。这样的深度可以有效屏蔽宇宙射线等外界干扰,为探测中微子提供较为纯净的实验环境。探测器特点: 拥有世界…...
React源码03 - React 中的更新
03 - React 中的更新 React 中创建更新的方式: 初次渲染:ReactDOM.render、ReactDOM.hydrate 后续更新:setState、forceUpdate 1. ReactDOM.render() 先创建 ReactRoot 顶点对象然后创建 FiberRoot 和 RootFiber创建更新,使应用进…...
【Hive实战】Hive MetaStore升级调研(Mysql)
Hive MetaStore升级调研(Mysql库) 文章目录 Hive MetaStore升级调研(Mysql库)升级步骤脚本说明原文 MetaStore升级的主要部分是对存储媒介mysql进行schema进行升级。 升级步骤 关闭MetaStore实例并限制对MetaStore MySQL数据库的访…...
优化漏洞扫描流程以保障企业数字化业务安全
漏洞扫描技术历经二十余年发展,已从人工搜索演进至开源及商业扫描平台,其应用紧随IT环境与数字业务变迁而不断革新。为有效提升漏洞检测效果,确保企业数字化业务安全运行,安全专家建议遵循以下关键步骤实施漏洞扫描: …...
【大数据算法】一文掌握大数据算法之:大数据算法分析技术。
大数据算法分析技术 1、引言2、 大数据分析技术2.1 时间/空间复杂度2.2 I/O 复杂度2.3 结果质量2.4 通信复杂度 3、总结 1、引言 小屌丝:鱼哥,最近更文有些不频繁了哈。 小鱼:这一个月不见,你这说话方式也变了。 小屌丝ÿ…...
使用AITemplate和AMD GPU的高效图像生成:结合Stable Diffusion模型
Efficient image generation with Stable Diffusion models and AITemplate using AMD GPUs 2024年1月24日,作者是[Douglas Jia] Stable Diffusion 已成为图像生成领域的突破性进展,帮助用户将文本描述转化为引人入胜的视觉输出。 Stable Diffusion 的…...
基于yolov10的驾驶员抽烟打电话安全带检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
【算法介绍】 基于YOLOv10的驾驶员抽烟、打电话、安全带检测系统是一种先进的驾驶行为监测系统。该系统利用YOLOv10算法的高效性和准确性,实现对驾驶员行为的实时检测与识别。 YOLOv10是一种最新的实时物体检测模型,其通过深度学习技术,如卷…...
虚拟机网络设置为桥接模式
1、打开VMware Workstation Pro,点击“虚拟机—设置”,进入虚拟机设置页面 2、点击“网络适配器”,网络连接选择桥接模式 3、点击“编辑—虚拟网络编辑器”,进入虚拟网络编辑器页面 4、选择桥接模式,并选择要桥接到的…...
Numpy基础02
目录 1.数组操作 1.1改变维度 1.2遍历数组 1.2.1nditer(array,order) 1.2.1.1flags 参数 1.2.1.2op_flags 参数 1.3平展数组 1.3.1flatten(orderC) 1.3.2ravel() 1.4数组转置 1.4.1transpose() 1.4.2T 1.5分割数组 1.5.1hsplit(arr,indices_or_section) 1.5.2vsp…...
Elasticsearch是做什么的?
初识elasticsearch 官方网站:Elasticsearch:官方分布式搜索和分析引擎 | Elastic Elasticsearch是做什么的? Elasticsearch 是一个分布式搜索和分析引擎,专门用于处理大规模数据的实时搜索、分析和存储。它基于 Apache Lucene …...
Java中消息队列
MQ是Message Queue的缩写,也就是消息队列的意思,它是一种应用程序对应用程序的通信方法,使得应用程序能够通过读写出入列队的消息来进行通信,而无需要使用专用的连接来链接它们。消息队列中间件是分布式系统中重要的组件ÿ…...
AI辅助开发:让快马平台Kimi模型帮你构建《构石》官网智能搜索功能
最近在帮《构石》期刊官网开发智能搜索功能时,发现用传统方式写代码效率太低。尝试了InsCode(快马)平台的AI辅助开发后,整个过程变得特别顺畅。这里分享下具体实现思路和平台使用体验。 需求分析 期刊官网需要支持多条件组合搜索,包括年份范围…...
Dynamic Deep Learning for Li-ion Battery Fault Detection: A Practical Approach with Real-world EV Da
1. 动态深度学习在锂电池故障检测中的核心价值 锂电池作为电动汽车的核心部件,其健康状况直接关系到整车的安全性和可靠性。传统基于阈值的检测方法在面对复杂多变的实际工况时,往往表现不佳。我们团队在实际测试中发现,某品牌车辆在低温环境…...
iOS 版本nethack如何更换图形包-iNetHack2
这个iNetHack2这个应该我都没有找到设置按钮。后来无意中在贴吧中看到的。原来它的设置竟然在iOS的系统设置之中,是我少见多怪了,这可能是我见过的App 第1个在系统设置中设置的。UI中的Tileset 设置成Tiles32的界面风格就与nethack官方的UI一致了。...
CCF和中国科协对NeurIPS更正投稿政策做出回应
点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信号:CVer2233,小助手拉你进群!扫描下方二维码,加入CVer学术星球!可以获得最新顶会/顶…...
Hunyuan-MT-7B与SpringBoot整合实战:企业级翻译服务开发
Hunyuan-MT-7B与SpringBoot整合实战:企业级翻译服务开发 1. 引言 在全球化业务快速发展的今天,企业经常需要处理多语言内容。传统翻译方案要么成本高昂,要么响应速度慢,很难满足实时业务需求。腾讯开源的Hunyuan-MT-7B翻译模型&…...
告别PuTTY!Windows 10/11自带OpenSSH客户端保姆级配置教程
告别PuTTY!Windows 10/11自带OpenSSH客户端保姆级配置教程 如果你还在使用PuTTY或Xshell等第三方SSH工具,现在是时候重新审视Windows自带的OpenSSH客户端了。微软从Windows 10 1809版本开始内置了完整的OpenSSH套件,经过多年迭代已经足够成熟…...
DAMO-YOLO实战:搭建教育科研AI视觉实验平台
DAMO-YOLO实战:搭建教育科研AI视觉实验平台 1. 教育科研中的AI视觉需求 在教育科研领域,视觉AI技术正成为重要的研究工具。传统计算机视觉实验平台往往面临部署复杂、性能有限、交互体验差等问题。DAMO-YOLO智能视觉探测系统为解决这些问题提供了创新方…...
5个场景带你体验KISS Translator:让网页双语阅读不再是难题
5个场景带你体验KISS Translator:让网页双语阅读不再是难题 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcod…...
Wan2.1 VAE与微信小程序开发结合:打造个人AI头像生成工具
Wan2.1 VAE与微信小程序开发结合:打造个人AI头像生成工具 你有没有想过,用一张自己的照片,就能快速生成几十种不同风格的艺术头像?无论是动漫风、油画感,还是赛博朋克,都能一键搞定。以前这可能需要专业的…...
巧用Google Maps与ScreenToGif:零行程数据也能轻松生成动态路线图
1. 从零开始制作动态路线图的必备工具 最近有个朋友问我:"想给客户展示项目选址的交通路线,但实地考察还没开始,怎么做出专业的动态路线图?"这让我想起自己两年前第一次做商业提案时的窘境——当时为了展示物流配送路线…...
