抽签小程序(C语言随机数)

2023-11-18

最近班级里需要人员抽签参加活动,闲来无事用java的(Math.random()方法||java.util.Random())写了一个随机抽签的,所以我又了解了一下C语言的随机数获取。

C语言的随机数获取:
参考:http://c.biancheng.net/view/2043.html
程序的抽签信息源文件可以自己通过程序去做出来。。。咳咳,虽然方法很笨…
程序中有些函数注释掉了,还有的隐藏了,就是制作源信息文件的。
你们可以改进改进,我这个写的比较乱。。。
还有就是因为我不太喜欢参加活动,所以在随机数函数里是输出不出来46号的。。
具体程序代码

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
#define COUNT 48 //总人数
//#define STU 20   //抽取学生人数 -为用户自定义人数,所以不启用 
//#define INITCOUNT 100 顺序表初始化量 
//#define INCREMENT 10  顺序表增量 
typedef struct
{
	char no[15];//学号
	char name[10];//姓名 
}student;
//-----------------------------------
FILE *stu,*lu;//定义学生信息源文件指针,幸运儿文件指针 
char *pno="学号",*pname="姓名",*pflag="编号";//字符串指针
int n;//抽取幸运儿数量 
//-----------------------------------
/*typedef struct
{
	student *data;//基地址
	int length;//长度 
}StuList; 顺序表-暂不启用 
*/ 
//----函数声明---
void MENU();//菜单 
unsigned int RandomNum();//随机数,Seed为time,单位为秒 
void DivCount(int *n);//用户自定义抽取人数
void TestInput(student *p);//测试输入
int WriteLuckyVisible(student *p,int *Lucky);//写入幸运儿txt文件,用户可视化的
int ReadStu(student *p); //读取信息源文件 
int WriteStuInvisible(student *p);//制作信息源文件时使用
int ReadStuVisible(student *p);//制作读取数据源信息时使用 
//--------------
void main()
{
	//-----变量定义----------
	 
	int choose,i,j;
	int Lucky[COUNT];//幸运儿 
	student data[COUNT];
	//----------------------
	DivCount(&n); 
	//ReadStuVisible(data);制作完毕-暂不启用 
	ReadStu(data);
	for(;;)
	{
	MENU();
	scanf("%d",&choose); 
	switch(choose)
	{
		case 1:
		do
		{
			printf("--抽取中--\n");
			printf("计数 丨%s丨%s\t  %s\n",pflag,pno,pname);
			for(i=0;i<n;i++)
			{
				 
				Lucky[i]=RandomNum();
				for(j=0;j<i;j++)//---寻找重复项 
				{
					
					if(Lucky[j]==Lucky[i])
						while(Lucky[i]==Lucky[j])
						{
							Lucky[i]=RandomNum();
						}
							 
					else
						continue;
				}
				
			
				//printf("%d\n",Lucky[i]);随机数重复测试 
				printf("第%-3d. %-4d% -13s %-5s\n",i+1,Lucky[i],data[Lucky[i]-1].no,data[Lucky[i]-1].name);//下标从0开始 
			}
			
				
			//------------------------------
			printf("【1.重新抽取丨2.输出至TXT文件丨】:");
			scanf("%d",&choose); 
			switch(choose)
			{
				case 1:;break;
				case 2:
				if((WriteLuckyVisible(data,Lucky)==1))
					printf("输出成功!\n");
				else
					printf("错误!\n"); 
				;break;
				
				default:printf("输入错误!\n");
			} 
			
		}while(choose==1);
		;break;
		case 2:exit(0);break;
		case 8:printf("%s\t%s",data[0].no,data[0].name);break; 
		case 9:
		//TestInput(data);
		WriteStuInvisible(data);break;
		default:printf("\t\t\t\t\t输入错误!");break;
	}
	system("pause"); 
	}
	
	
}
int ReadStuVisible(student *p)
{
	int i;
	if((stu=fopen("002.txt","r"))==NULL)
	return 0;
	for(i=0;i<COUNT;i++)
	fscanf(stu,"%s %s",(p+i)->name,(p+i)->no);
	fclose(stu);
	return 1;
}
int ReadStu(student *p)
{
	if((stu=fopen("Source.data","r"))==NULL)
		return 0;
	fread(p,sizeof(student),COUNT,stu);
	fclose(stu);
	return 1;
}
int WriteStuInvisible(student *p)
{
	if((stu=fopen("Source.data","wt+"))==NULL)
		return 0;
		fwrite(p,sizeof(student),COUNT,stu);
	fclose(stu);
		return 1;
}
int WriteLuckyVisible(student *p,int *Lucky)
{
	int i;
	if((lu=fopen("LuckyDog.txt","wt+"))==NULL)
		return 0;

	fprintf(lu,"计数 丨%s丨%s\t           %s\n",pflag,pno,pname);
	for(i=0;i<n;i++)
	{
		fprintf(lu,"第%-4d.    %-4d% -13s %-5s\n",i+1,Lucky[i],p[Lucky[i]-1].no,p[Lucky[i]-1].name);
	}
	fclose(lu);
	return 1;
}
void TestInput(student *p)
{
	int i;
	for(i=0;i<COUNT;i++)
	{
		system("cls");
		printf("----No.%d----\n",i+1);
		printf("学号:");
		scanf("%s",(p+i)->no);
		printf("姓名;");
		scanf("%s",(p+i)->name);
		
	}
}
void DivCount(int *n)
{
	for(;;)
	{
	system("cls");
	printf("\t\t\t\t请输入本次准备抽取人数:");
	scanf("%d",n);
	if(*n<1||*n>COUNT)
	{
		printf("\t\t\t\t抽取人数不合法!");
		system("pause");
		continue; 
	}
	else
		break; 
		
	}

		
}
unsigned int RandomNum()
{
	unsigned int x;
	srand(time(NULL));
	for(;;)
	{
		Sleep(1000);
		x=rand()%COUNT+1;
		if(x!=46)
			break;
		else
			continue;
	}
	
	return x;
}
void MENU()
{
	system("cls");
	printf("\t\t\t\t --------------------\n");
	printf("\t\t\t\t丨 1.抽取    2.结束 丨\n");
	printf("\t\t\t\t --------------------\n");
	printf("\t\t\t\t 请输入:");
} 

呃呃,自己预想的好多功能还没有实现,而且抽签的实现方法还有点复杂。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抽签小程序(C语言随机数) 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐