当前位置: 首页 > news >正文

一个简单的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 用途&#xff1a;练习20以内2位数乘法速算的程序 功能1&#xff1a;支持用户设定题目数量 std::cout << "请输入本次练习题目数量&#xff1a;";int numProblems 0;std::string num;std::cin >> num;try {numProblems std::stoi(…...

windows文件拷贝给wsl2的Ubuntu

参考&#xff1a; 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 中的组件规划管脚时&#xff0c;请将引脚放置在同一个 SLR 中。例如&#xff0c;将器件的 DNA 信息作为外部接口的一部分 时&#xff0c;请将该接口的引脚放置在 DNA_PORT 所在的主 SLR 中。其它考虑因素包括如下&#xff1a; • 把…...

Lua环境安装

软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 Lua是一种轻量级、小巧且易于嵌入应用程序的脚本语言&#xff0c;广泛用于游戏开发、Web开发、自动化脚本等领域。本文将详细介绍如何在不同操作系统上安装L…...

浏览器控制的无线开关

esp32-c3 作为HTTP server 控制led 灯。服务器注册两个uri 。一个"/open" 控制开&#xff0c;一个"/close"控制关。下一步再用一片c3作为客户端&#xff0c;运行http client 发送/open. /Close 模拟浏览器&#xff0c;控制led. 其实只要用手机或pc或平…...

Docker部署SSM项目及避坑指南

#又踩坑了&#xff0c;这里记录一下&#xff0c;以免日后忘记 前言&#xff1a;本来以为用docker部署个项目很轻松&#xff0c;嗯结果&#xff0c;又踩坑了&#xff0c;这里记录一个完整版。话不多说&#xff0c;开整。 第一步&#xff1a; 用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之后&#xff0c;每次打开终端&#xff0c;总是显示正在使用默认anaconda中的base环境&#xff0c;如下如所示&#xff1a; 取消该默认设置&#xff0c;打开home目录下的.condarc文件&#xff0c;在末尾添加如下命令&#xff1a; auto_activate_base: fa…...

江门中微子到底是做什么的?

江门中微子实验是一项重要的大科学装置实验。以下是关于它的一些详细信息&#xff1a; 实验位置与建设深度&#xff1a;位于广东江门地下 700 米处。这样的深度可以有效屏蔽宇宙射线等外界干扰&#xff0c;为探测中微子提供较为纯净的实验环境。探测器特点&#xff1a; 拥有世界…...

React源码03 - React 中的更新

03 - React 中的更新 React 中创建更新的方式&#xff1a; 初次渲染&#xff1a;ReactDOM.render、ReactDOM.hydrate 后续更新&#xff1a;setState、forceUpdate 1. ReactDOM.render() 先创建 ReactRoot 顶点对象然后创建 FiberRoot 和 RootFiber创建更新&#xff0c;使应用进…...

【Hive实战】Hive MetaStore升级调研(Mysql)

Hive MetaStore升级调研&#xff08;Mysql库&#xff09; 文章目录 Hive MetaStore升级调研&#xff08;Mysql库&#xff09;升级步骤脚本说明原文 MetaStore升级的主要部分是对存储媒介mysql进行schema进行升级。 升级步骤 关闭MetaStore实例并限制对MetaStore MySQL数据库的访…...

优化漏洞扫描流程以保障企业数字化业务安全

漏洞扫描技术历经二十余年发展&#xff0c;已从人工搜索演进至开源及商业扫描平台&#xff0c;其应用紧随IT环境与数字业务变迁而不断革新。为有效提升漏洞检测效果&#xff0c;确保企业数字化业务安全运行&#xff0c;安全专家建议遵循以下关键步骤实施漏洞扫描&#xff1a; …...

【大数据算法】一文掌握大数据算法之:大数据算法分析技术。

大数据算法分析技术 1、引言2、 大数据分析技术2.1 时间/空间复杂度2.2 I/O 复杂度2.3 结果质量2.4 通信复杂度 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;最近更文有些不频繁了哈。 小鱼&#xff1a;这一个月不见&#xff0c;你这说话方式也变了。 小屌丝&#xff…...

使用AITemplate和AMD GPU的高效图像生成:结合Stable Diffusion模型

Efficient image generation with Stable Diffusion models and AITemplate using AMD GPUs 2024年1月24日&#xff0c;作者是[Douglas Jia] Stable Diffusion 已成为图像生成领域的突破性进展&#xff0c;帮助用户将文本描述转化为引人入胜的视觉输出。 Stable Diffusion 的…...

基于yolov10的驾驶员抽烟打电话安全带检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv10的驾驶员抽烟、打电话、安全带检测系统是一种先进的驾驶行为监测系统。该系统利用YOLOv10算法的高效性和准确性&#xff0c;实现对驾驶员行为的实时检测与识别。 YOLOv10是一种最新的实时物体检测模型&#xff0c;其通过深度学习技术&#xff0c;如卷…...

虚拟机网络设置为桥接模式

1、打开VMware Workstation Pro&#xff0c;点击“虚拟机—设置”&#xff0c;进入虚拟机设置页面 2、点击“网络适配器”&#xff0c;网络连接选择桥接模式 3、点击“编辑—虚拟网络编辑器”&#xff0c;进入虚拟网络编辑器页面 4、选择桥接模式&#xff0c;并选择要桥接到的…...

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 官方网站&#xff1a;Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic Elasticsearch是做什么的&#xff1f; Elasticsearch 是一个分布式搜索和分析引擎&#xff0c;专门用于处理大规模数据的实时搜索、分析和存储。它基于 Apache Lucene …...

Java中消息队列

MQ是Message Queue的缩写&#xff0c;也就是消息队列的意思&#xff0c;它是一种应用程序对应用程序的通信方法&#xff0c;使得应用程序能够通过读写出入列队的消息来进行通信&#xff0c;而无需要使用专用的连接来链接它们。消息队列中间件是分布式系统中重要的组件&#xff…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...