搜索
查看: 1784|回复: 4
打印 上一主题 下一主题

我在网上找的代码,怎么提示失败啊?

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-28 14:33:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_NUM 9999

//定义保存人名和电话的数据结构
struct Person
{
char name[20];
char telno[15];
char award;
};

int num = 0; //统计人数
FILE *fp; //文件指针
Person persons[MAX_NUM]; //定义数组

int awarder_1[1] = {-1}; //一等奖
int awarder_2[2] = {-1, -1}; //二等奖
int awarder_3[5] = {-1, -1, -1, -1, -1};//三等奖

//读取文件
void readdata()
{
int i = 0; //数组下标
Person person;
//文件打开
fp = fopen("data.txt", "r");
if (fp == NULL)
{
printf("打开文件data.txt失败!\n");
return;
}
//当文件不为空
while (!feof(fp))
{
num ++;
fscanf(fp, "%s", person.telno);
fscanf(fp, "%s", person.name);
person.award = 'F';
persons[i++] = person;
}
}

//初始化标识
void init()
{
for(int i = 0; i < num; i++)
{
persons[i].award = 'F';
}
}

//显示单个中奖信息
void info( int i)
{
printf("手机号码: %s 姓名: %s\n", persons[i].telno, persons[i].name);
}

void main()
{
char again = 'Y';
//读取文件
readdata();

printf("简单抽奖程序\n");
srand((long)time(0));

while(again == 'Y' || again == 'y')
{
//初始化标识
init();

printf("\n开始抽第一等奖(1名),按任意键开始...\n");
getchar();
awarder_1[0] = abs(rand() % num);
while (persons[awarder_1[0]].award == 'T')
{
awarder_1[0] = rand() % num;
}
persons[awarder_1[0]].award = 'T';

info(awarder_1[0]);

printf("\n开始抽第二等奖(2名)\n");
for (int i = 0; i < 2; i++)
{
printf("\n第%d个二等奖,按任意键开始...\n", i+1);
getchar();
awarder_2[i] = rand() % num;
while (persons[awarder_2[i]].award == 'T')
{
awarder_2[i] = rand() % num;
}
persons[awarder_2[i]].award = 'T';
info(awarder_2[i]);
}

printf("\n\n开始抽第三等奖(5名)\n");
for (i = 0; i < 5; i++)
{
printf("\n第%d个三等奖,按任意键开始...\n", i + 1);
getchar();

awarder_3[i] = rand() % num;
while (persons[awarder_3[i]].award == 'T')
{
awarder_3[i] = rand() % num;
}
persons[awarder_3[i]].award = 'T';
info(awarder_3[i]);
}

printf("\n是否重新开始抽奖?(Y or N)...\n");
again = getchar();
}

getchar();
return;
}


最佳答案

查看完整内容

他说的没错啊,不然后面的类型名全要写成struct Person 写Person通过不了编译的 另外101行的i未定义 还有些地方用了for(int i =0;;)这种c99特性 -std=c99才能编译
沙发
发表于 2013-4-28 14:33:57 | 只看该作者
Teddy 发表于 2013-4-28 19:53
你在这儿创建同义字干嘛?而且你也没简化,还用了相同名字……

他说的没错啊,不然后面的类型名全要写成struct Person
写Person通过不了编译的

另外101行的i未定义

还有些地方用了for(int i =0;;)这种c99特性
-std=c99才能编译

点评

可以把修改后的给发下嘛,我是刚接触,有点不懂。谢谢  发表于 2013-4-30 08:17
板凳
发表于 2013-4-28 18:53:21 | 只看该作者
我感觉没什么问题,你把那个data.txt准备好,还有前面的一个结构体声明改成这样
typedef struct Person
{
char name[20];
char telno[15];
char award;
}Person;
后面好像还有一个i未声明
地板
发表于 2013-4-28 19:53:59 | 只看该作者
osblow 发表于 2013-4-28 18:53
我感觉没什么问题,你把那个data.txt准备好,还有前面的一个结构体声明改成这样
typedef struct Person
...

你在这儿创建同义字干嘛?而且你也没简化,还用了相同名字……
5#
发表于 2013-4-29 08:45:59 | 只看该作者
rosynirvana 发表于 2013-4-28 22:20
他说的没错啊,不然后面的类型名全要写成struct Person
写Person通过不了编译的

嗯嗯,确实是这样,我一般使用C++标准,都没仔细研究过这个
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表