自己写的日语复习程序 程序可以运行,但是按了键盘后程序运行异常

dingdingdao2 dingdingdao2 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <process.h>
#include <math.h>
#include <unistd.h>

int ISTIMEPASS = 0; //时间循环结束触发器
int TIMEFUNABORT = 0; //时间循环函数终止
int ISKEYPRINT = 0; //键盘按键按下
int KEYFUNABORT = 0; //键盘循环函数终止

//检测按键函数 子线程调用函数
void KeyPrint( void* Argu )
{
fflush( stdin );
while(1)
{
if( KEYFUNABORT == 1 )
return;
else if( kbhit() != 0 )
{
ISKEYPRINT = 1;
return;
}
}
}

//检测超时函数 子线程调用函数
void RunTime( void* Argu )
{
int nTimeBegin = clock();
int nTimeEnd;
while(1)
{
nTimeEnd = clock();
if( abs( nTimeEnd - nTimeBegin ) >= 16000 )
{
ISTIMEPASS = 1;
return;
}
else if( TIMEFUNABORT == 1 )
return;

}
}

//打印整个日语的发音
void printAnnounce( int nReviewNum )
{
//为随机产生不同的随机数播种子
srand( (unsigned)time(NULL) );

//将随机产生的随机数(1-10)对应的发音打印出来
int nNum = rand()% ( nReviewNum + 1 ) + 1;

switch( nNum )
{
case 1:
puts( "a" );
break;
case 2:
puts( "i" );
break;
case 3:
puts( "u" );
break;
case 4:
puts( "e" );
break;
case 5:
puts( "o" );
break;
case 6:
puts( "ka" );
break;
case 7:
puts( "ki" );
break;
case 8:
puts( "ku" );
break;
case 9:
puts( "ke" );
break;
case 10:
puts( "ko" );
break;
case 11:
puts( "sa" );
break;
case 12:
puts( "si---s" );
break;
case 13:
puts( "su" );
break;
case 14:
puts( "se" );
break;
case 15:
puts( "so" );
break;
case 16:
puts( "ta" );
break;
case 17:
puts( "tsi----s" );
break;
case 18:
puts( "te" );
break;
case 19:
puts( "to" );
break;
case 20:
puts( "na" );
break;
case 21:
puts( "ni" );
break;
case 22:
puts( "nu" );
break;
case 23:
puts( "ne" );
break;
case 24:
puts( "no" );
break;
case 25:
puts( "ha" );
break;
case 26:
puts( "hi" );
break;
case 27:
puts( "fu" );
break;
case 28:
puts( "he" );
break;
case 29:
puts( "ho" );
break;
case 30:
puts( "ma" );
break;
case 31:
puts( "mi" );
break;
case 32:
puts( "mu" );
break;
case 33:
puts( "me" );
break;
case 34:
puts( "mo" );
break;
case 35:
puts( "ya" );
break;
case 36:
puts( "i" );
break;
case 37:
puts( "yu" );
break;
case 38:
puts( "e" );
break;
case 39:
puts( "yo" );
break;
case 40:
puts( "ra" );
break;
case 41:
puts( "ri" );
break;
case 42:
puts( "ru" );
break;
case 43:
puts( "re" );
break;
case 44:
puts( "ro" );
break;
case 45:
puts( "wa" );
break;
case 46:
puts( "i" );
break;
case 47:
puts( "u" );
break;
case 48:
puts( "e" );
break;
case 49:
puts( "o" );
break;
default :
printf(" wrong Num: %d\n", nNum);
}
}

int main()
{
//获得要复习的单词的个数
int nReviewNum = 0;
printf( "输入要复习的单词的个数:" );
scanf( "%d", &nReviewNum );

//清屏标志
int ncount = 0;
//无限循环输出音
while( 1 )
{
if( ncount == 5 )
{
system( "cls" );//清屏
ncount = 0;
}


//打印一个字符。
printAnnounce( nReviewNum );
ncount++;

//开启另一个线程负责统计时间+ 主线程负责监视键盘。当有一个启动时打印下一个字符发音
_beginthread( RunTime, 0, NULL );
_beginthread( KeyPrint, 0, NULL );

while( 1 )
{
if( ISTIMEPASS == 1 ) //超时
{
KEYFUNABORT = 1; //终止KeyFun子线程
break;
}
else if( ISKEYPRINT == 1 )
{
TIMEFUNABORT = 1; //终止RunTime子线程
break;
}
}

//全局数据恢复原状
ISTIMEPASS = 0;
TIMEFUNABORT = 0;
ISKEYPRINT = 0;
KEYFUNABORT = 0;

//等待2秒钟等待子线程回收完毕
Sleep( 2000 );
}

system("pause");
return 0;
}

上面的程序可以运行,在不按键盘的时候每隔一段时间出现下一个日语读音。但是当我按了键盘后日语读音出现的就很快了。不知道哪里出来的异常。
...全文

相关推荐

NT日语转区工具

需要注意的是,虽然转区工具能有效解决乱码问题,但它可能会对系统其他部分产生短暂影响,比如可能导致某些依赖于系统区域设置的程序运行异常。因此,不推荐在进行重要工作或使用其他语言软件时使用转区工具。

qq_31444021

日语能力测试N2复习资料_精选.doc

这份复习资料全面覆盖了日语能力测试N2级别所需要的知识点,通过有计划的复习,考生可以系统地提升日语听、说、读、写各方面的能力,为考试做好充分的准备。

dchw66

java编程相关日语词汇

**例外 (exception)** - 异常是在程序运行时发生的不正常情况,可以通过异常处理来捕获并处理。11. **キャスト (cast)** - 类型转换,将一个对象从一种类型转换为另一种类型。

pizirefus

WordPass自用肝英日语单词例句工具_文本操作窗口间切换子窗口直接给父窗口传信号自定义列表窗口属性设置配置文件读取异常修复例句复习功能_用于个人高效学习英语和日语单词及例句通过.zip

软件还提供了配置文件读取的异常修复功能,即便在配置文件出现读取错误或者丢失时,也能迅速找到问题根源并进行修复,保证用户的学习数据不受损失。这样的设计考虑周到,确保了软件的稳定运行和用户数据的安全。

2501_92227435

日语超市系统,c++,超市系统源程序

**错误处理和异常安全**:确保程序在遇到问题时能够正确地处理和恢复,避免数据丢失。7. **数据库集成**:可能需要连接到SQL数据库(如MySQL、SQLite等)以存储大量数据。8.

高超数据
评论 2
收藏 已收藏
分享
返回顶部
dingdingdao2
C语言 70,040 成员 243,237 内容