C#基础之------控制台进程

/*********************************************************************************

File:C#实现100以内两个数随机数的加减乘除答题系统,带计时功能,分数计算功能。

Date:2014年8月12日

Author:小X

problem:加入线程后,控制台每一秒中刷新一次,显示的时候占用后面的界面,造成排版出现错误。

**********************************************************************************/

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 using System.Threading;
  7
  8 namespace CalcuSys
  9 {
 10     class Program
 11     {
 12         static int fenshu = 0;
 13         static void Main(string[] args)
 14         {
 15             int i = 0;
 16             Console.WriteLine("----------------简单计算测试!-------------------\r\n");
 17             Console.WriteLine("按下任意键开始答题");
 18             StopWatch sw = new StopWatch();
 19             Console.ReadKey();
 20              sw.Start();
 21             while (true)
 22             {
 23                 Calculation();
 24                 i++;
 25                 if (i == 10)
 26                 {
 27                     Console.WriteLine(fenshu * 10 + "分");
 28                     Console.WriteLine("结束请输入Y,继续测试请输入回车键");
 29
 30                     if (Console.ReadLine().ToUpper() == "Y")
 31                         break;
 32                     i = 0;
 33                     fenshu = 0;
 34                 }
 35             }
 36         }
 37
 38         static void Calculation()
 39         {
 40             var n = new Random();
 41             int num1 = n.Next(100);   //返回一个小于所指定最大值的非负随机数。
 42             int num2 = n.Next(100);
 43             int num3 = n.Next(4);
 44
 45             string message = "请计算{0}{1}{2}的值";
 46             if (num3 == 0)
 47             {
 48                 Console.WriteLine(string.Format(message, num1, "+", num2));
 49                 int res;
 50                 if (int.TryParse(Console.ReadLine(), out res) && res == num1 + num2)
 51                 {
 52                     Console.WriteLine("回答正确!");
 53                     fenshu++;
 54                 }
 55
 56                 else
 57                     Console.WriteLine("回答错误!");
 58             }
 59             else if (num3 == 1)
 60             {
 61                 Console.WriteLine(string.Format(message, num1, "-", num2));
 62                 int res;
 63                 if (int.TryParse(Console.ReadLine(), out res) && res == num1 - num2)
 64                 {
 65                     Console.WriteLine("回答正确!");
 66                     fenshu++;
 67                 }
 68                 else
 69                     Console.WriteLine("回答错误!");
 70             }
 71             else if (num3 == 2)
 72             {
 73                 Console.WriteLine(string.Format(message, num1, "*", num2));
 74                 int res;
 75                 if (int.TryParse(Console.ReadLine(), out res) && res == num1 * num2)
 76                 {
 77                     Console.WriteLine("回答正确!");
 78                     fenshu++;
 79                 }
 80                 else
 81                     Console.WriteLine("回答错误!");
 82             }
 83             else
 84             {
 85                 Console.WriteLine(string.Format(message, num1, "/", num2));
 86                 Console.WriteLine("商为:");
 87                 int res;
 88                 if (int.TryParse(Console.ReadLine(), out res) && res == num1 / num2)
 89                 {
 90                     Console.WriteLine("回答正确!");
 91                     Console.WriteLine("余为:");
 92                     if (int.TryParse(Console.ReadLine(), out res) && res == num1 % num2)
 93                     {
 94                         Console.WriteLine("回答正确!");
 95                         fenshu++;
 96                     }
 97                     else
 98                         Console.WriteLine("回答错误!");
 99                 }
100                 else
101                     Console.WriteLine("回答错误!");
102             }
103         }
104
105         class StopWatch
106         {
107             private int Interval = 1000;              //时间间隔,单位毫秒
108             private int Time = 0;                        //所显示的时间
109             public void Start()
110             {
111                 Thread timer = new Thread(new ThreadStart(Timer));  //新建一个线程,该线程调用Timer()
112                 timer.Start();                               //启动线程
113                 Console.CursorVisible = false;   //隐藏光标
114                 //Console.ReadKey(true);            //等待按任意键退出
115                 //timer.Abort();                              //终止线程,用于停止秒表
116             }
117             private void Timer()
118             {
119                 while (true)
120                 {
121                     Display();                               //显示秒表计数
122                     Thread.Sleep(Interval);         //等待1秒后再执行Timer()刷新计数
123                     Time++;                                 //秒数加1
124                 }
125             }
126             private void Display()
127             {
128                 Console.SetCursorPosition(0, 0);
129                 Console.WriteLine("Time:" + Time.ToString());
130             }
131         }
132     }
133 }

显示效果:

                  (不带进程显示正常)

加入计时功能:

                (加入进程之后显示错乱,未找到解决方法)

欢迎大家一起交流 ,分享程序员励志故事。   幸福的程序员 QQ群:

C#基础之------控制台进程,布布扣,bubuko.com

时间: 2024-10-26 18:58:47

C#基础之------控制台进程的相关文章

python网络编程基础(线程与进程、并行与并发、同步与异步)

python网络编程基础(线程与进程.并行与并发.同步与异步) 目录 线程与进程 并行与并发 同步与异步 线程与进程 进程 前言 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大们就在想若在任务A读取数据时,让任务B执行,当任务A读取完数据后,再切换到任务A执行.注意关键字切换,自然是切换,那么这就涉及到了状态的保存,状态的恢复,加上任务A与任务B所需要的

Python开发基础--- 进程间通信、进程池、协程

进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 进程队列queue 不同于线程queue,进程queue的生成是用multiprocessing模块生成的. 在生成子进程的时候,会将代码拷贝到子进程中执行一遍,及子进程拥有和主进程内容一样的不同的名称空间. 示例1: 1 import multiprocessing 2 def foo(): 3 q.put([11,'hello',True]

python基础26 -----python进程及协成

一.进程 1.multiprocessing模块实现多进程并发. 1.1multiprocessing包是Python中的多进程管理包,与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程 该进程可以运行在Python程序内部编写的函数,属于父进程和子进程的关系.该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法. 1.2Process类的简绍 构造方法: Process([gro

Python基础—线程、进程和协程

今天已是学习Python的第十一天,来干一碗鸡汤继续今天的内容,今天的鸡汤是:超越别人对你的期望.本篇博客主要介绍以下几点内容: 线程的基本使用: 线程的锁机制: 生产者消费之模型(队列): 如何自定义线程池: 进程的基本使用: 进程的锁机制: 进程之间如何实现数据共享: 进程池: 协程的基本使用. 一.线程 1.创建线程 上篇博客已经介绍过如何创建多线程的程序,在这里在复习一下如何创建线程过程以及线程的一些方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

Python菜鸟之路:Python基础-线程、进程、协程

上节内容,简单的介绍了线程和进程,并且介绍了Python中的GIL机制.本节详细介绍线程.进程以及协程的概念及实现. 线程 基本使用 方法1: 创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入 import threading import time def worker(): time.sleep(2) print("test") for i in range(5): t = threading.Thread(target=

2016年9月29日--语言基础:控制台的输入输出、数据类型、数据转换、运算符

一.输入输出 二.数据类型 1.值类型 2.引用类型 三.数据转换 四.运算符 1.算术运算符2.关系运算符3.逻辑运算符4.其它运算符5.条件运算符 一.输入输出 输出 Console.Write(""); Console.WriteLine(""); 输出 输入 Console.Read (); Console.ReadLine(); Console.ReadKey(); Console.ReadLine(); //直到接受到回车命令为止,之前所有输入的内容全部

python基础-UDP、进程、进程池、paramike模块

1 基于UDP套接字1.1 介绍 udp是无连接的,是数据报协议,先启动哪段都不会报错 udp服务端 import socket sk = socket() #创建一个服务器的套接字 sk.bind() #绑定服务器套接字 while True: #服务器无限循环 cs = sk.recvfrom()/sk.sendto() # 对话(接收与发送) sk.close() # 关闭服务器套接字 udp客户端 import socket client = socket() # 创建客户套接字 whi

vc++基础班[26]---进程的相关操作

①.ShellExecute 进行进程的创建,属于 shell api: //int iRet = (int)ShellExecute(m_hWnd, _T("open"), _T("NOTEPAD.EXE"), _T("C:\\123.txt"), NULL, SW_SHOW); int iRet = (int)ShellExecute(m_hWnd, _T("open"), _T("C:\\WINDOWS\\NO

python基础27 -----python进程终结篇-----IO模型

一.IO模型 1.IO模型分类 1.阻塞IO--------blocking IO 2.非阻塞IO------nonblocking IO 3. 多路复用IO------- multiplexing 4.信号驱动IO-------signal driven IO (工作中不会使用到,只是作为了解) 5.异步IO------- asynchronous IO 2.通常情况下IO默认操作分为两个阶段(默认都是阻塞IO) 1.准备等待数据阶段,相当于请求操作系统是否有数据发送过来(调用IO操作). 2