C#基础之------控制台进程
/*********************************************************************************
File:C#实现100以内两个数随机数的加减乘除答题系统,带计时功能,分数计算功能。
Date:2014年8月12日
Author:小X
problem:加入线程后,控制台每一秒中刷新一次,显示的时候占用后面的界面,造成排版出现错误。
**********************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading; namespace CalcuSys
{
class Program
{
static int fenshu = ;
static void Main(string[] args)
{
int i = ;
Console.WriteLine("----------------简单计算测试!-------------------\r\n");
Console.WriteLine("按下任意键开始答题");
StopWatch sw = new StopWatch();
Console.ReadKey();
sw.Start();
while (true)
{
Calculation();
i++;
if (i == )
{
Console.WriteLine(fenshu * + "分");
Console.WriteLine("结束请输入Y,继续测试请输入回车键"); if (Console.ReadLine().ToUpper() == "Y")
break;
i = ;
fenshu = ;
}
}
} static void Calculation()
{
var n = new Random();
int num1 = n.Next(); //返回一个小于所指定最大值的非负随机数。
int num2 = n.Next();
int num3 = n.Next(); string message = "请计算{0}{1}{2}的值";
if (num3 == )
{
Console.WriteLine(string.Format(message, num1, "+", num2));
int res;
if (int.TryParse(Console.ReadLine(), out res) && res == num1 + num2)
{
Console.WriteLine("回答正确!");
fenshu++;
} else
Console.WriteLine("回答错误!");
}
else if (num3 == )
{
Console.WriteLine(string.Format(message, num1, "-", num2));
int res;
if (int.TryParse(Console.ReadLine(), out res) && res == num1 - num2)
{
Console.WriteLine("回答正确!");
fenshu++;
}
else
Console.WriteLine("回答错误!");
}
else if (num3 == )
{
Console.WriteLine(string.Format(message, num1, "*", num2));
int res;
if (int.TryParse(Console.ReadLine(), out res) && res == num1 * num2)
{
Console.WriteLine("回答正确!");
fenshu++;
}
else
Console.WriteLine("回答错误!");
}
else
{
Console.WriteLine(string.Format(message, num1, "/", num2));
Console.WriteLine("商为:");
int res;
if (int.TryParse(Console.ReadLine(), out res) && res == num1 / num2)
{
Console.WriteLine("回答正确!");
Console.WriteLine("余为:");
if (int.TryParse(Console.ReadLine(), out res) && res == num1 % num2)
{
Console.WriteLine("回答正确!");
fenshu++;
}
else
Console.WriteLine("回答错误!");
}
else
Console.WriteLine("回答错误!");
}
} class StopWatch
{
private int Interval = ; //时间间隔,单位毫秒
private int Time = ; //所显示的时间
public void Start()
{
Thread timer = new Thread(new ThreadStart(Timer)); //新建一个线程,该线程调用Timer()
timer.Start(); //启动线程
Console.CursorVisible = false; //隐藏光标
//Console.ReadKey(true); //等待按任意键退出
//timer.Abort(); //终止线程,用于停止秒表
}
private void Timer()
{
while (true)
{
Display(); //显示秒表计数
Thread.Sleep(Interval); //等待1秒后再执行Timer()刷新计数
Time++; //秒数加1
}
}
private void Display()
{
Console.SetCursorPosition(, );
Console.WriteLine("Time:" + Time.ToString());
}
}
}
}
显示效果:

(不带进程显示正常)
加入计时功能:

(加入进程之后显示错乱,未找到解决方法)
欢迎大家一起交流 ,分享程序员励志故事。 幸福的程序员 QQ群:
C#基础之------控制台进程的更多相关文章
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...
- Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
- Visual Studio2019 F5调试程序时选择文件后调试控制台进程关闭问题
问题:Visual Studio2019 F5调试程序时选择文件后调试控制台进程关闭问题 解决方案: 修改Visual Studio 配置项 [工具]-[选项]-[项目和解决方案]-[Web项目]-[ ...
- Linux基础命令---init进程
init init是所有进程的父进程,它由内核执行,可以启动其他所有的进程.init指令在启动时会参考/etc/inittab文件的配置,完成其他进程的启动.init通常不会由用户进程执行,并且期望进 ...
- python基础26 -----python进程及协成
一.进程 1.multiprocessing模块实现多进程并发. 1.1multiprocessing包是Python中的多进程管理包,与threading.Thread类似,它可以利用multipr ...
- Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁
本节内容: 进程与线程区别 线程 a) 语法 b) join c) 线程锁之Lock\Rlock\信号量 d) 将线程变为守护进程 e) Event事件 f) queue队列 g) 生 ...
- WINDOWS黑客基础(4):查找进程运行的基址
从WINDOWS VISITA开始以后,windows已经开始支持随机基址的关系,也就是说以前我们的进程基址都是从0x40000开始的,如果一个变量在我们第一次运行的时候地址为0x50000,那么以后 ...
- python并发编程基础之守护进程、队列、锁
并发编程2 1.守护进程 什么是守护进程? 表示进程A守护进程B,当被守护进程B结束后,进程A也就结束. from multiprocessing import Process import time ...
- vc++基础班[26]---进程的相关操作
①.ShellExecute 进行进程的创建,属于 shell api: //int iRet = (int)ShellExecute(m_hWnd, _T("open"), ...
随机推荐
- 函数式C代码
代码如下: #include <stdlib.h> #include <stdio.h> typedef ]; typedef FILE* File; typedef stru ...
- C51工具是怎么进行覆盖分析的
C51工具针对8051微控制器的有限存储器资源进行了优化设计. 为了最有效地利用存储器,根据一个很容易解释的方法,自动变量和函数参数在存储器中均进行覆盖处理. 首先,连接器根据源程序生成调用树.例如: ...
- grok 添加字段
filter { grok { match =>[ "message","%{IPORHOST:clientip} \[%{HTTPDATE:time}\] \&q ...
- 利用jquery表格添加一行并在每行第一列大写字母显示实现方法
表格添加一行并在每行第一列大写字母显示jquery实现方法 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN& ...
- 多系统实现单点登录方案:SSO 单点登录
一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用 ...
- CF 579A Raising Bacteria
题意:细菌爱好者在盒子里面培养细菌.最初盒子是空的,每天可以往盒子里面添加任意数目的细菌,而且每天每个细菌会分裂成两个.在某一时刻要想获得某一数量的细菌,要求最初放置的最少的细菌数目. 思路: 求出 ...
- zedboard--Opencv移植和zedboard测试(十一)
继上次生成了ARM架构的链接库之后,我们要把他们拷贝到装载有文件系统的SD卡中即可,在拷贝时,最好是/usr/lib下 实践一:将那些lib拷贝到U盘里面,因为之前跑过demo,里面就是一个简易的li ...
- struts2——配置struts.xml文件
在struts2框架中struts.xml是应当放到src的根目录,程序编译后会将struts.xml放到WEB-INF/classes目录下. Struts2在web.xml中的一般配置如下: &l ...
- LinqToXML~读XML文件
linq的出现,带给我们的是简结,快速,可读性,它由linq to sql,linq to object,linq to XML组成,我的博客之前有对linq to sql的讲解,而今天,我将讲一个l ...
- 地下迷宫(bfs输出路径)
题解:开一个pre数组用编号代替当前位置,编号用结构题另存,其实也可以i*m+j来代替,我写的有点麻烦了; 代码: #include <iostream> #include <cst ...
