莫招烟云 2023-06-07 21:34 采纳率: 100%
浏览 65
已结题

关于while+try里写ReadKey+Sleep遇到的问题

关于while+try里写ReadKey+Sleep遇到的问题
.
想实现的效果:
让用户输入整数,如果输入的字符(串)无法成功转换为整数,则提示文本1秒,1秒后玩家才能再次输入信息:反之则输出用户的整数。
.
代码文本:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int i;
            while (true)
            {
                Console.WriteLine("请输入属于Int32的整数:");
                try
                {
                    i = Convert.ToInt32(Console.ReadLine());
                    break;
                }catch
                {
                    Console.WriteLine("请再次输入");
                    Thread.Sleep(1000);
                }
                Console.Clear();
            }
            Console.WriteLine("你输入了" + i);

            Console.ReadKey();
        }
    }
}

.
遇到的问题:
①输入非整数后(无法成功转换为整数的内容),提示文本时,快速多次摁下回车,随后提示文本将会不断的被触发。这样就违背了提示文本只显示1秒的效果。
②也可以直接狂摁回车,提示文本也将会不断的触发。
.
猜测的原因:
程序在Sleep的期间,获取用户键位输入并没有“停止”,而是存到了缓存中,在程序Sleep结束后一一触发。
所以程序在Sleep结束后,ReadKey函数便一一触发了缓存中的键位。
.
尝试的办法:
本人初学C#不久,又由于自己的猜测,便上网查找“清除控制台缓存”的C#代码的使用,但久久查询和尝试均未果。
.
目的简述:让程序在Sleep期间,不管用户输入若干任意键位(比如回车),在Sleep结束后,不响应在Sleep期间的键位输入。

  • 写回答

1条回答 默认 最新

  • Flashang_sg 2023-06-08 00:13
    关注

    可以判斷如果輸入 “空” 就不等一秒。
    也可以只顯示要求輸入數字,繼續接受輸入(不等一秒)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 6月7日

悬赏问题

  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip