怎样把 c 和 d 定义成全局变量
#include <stdio.h>#include <string.h>
#include <stdlib.h>
#define MAX_CHAR 20 // 最大字符
#define MAX_NUM 100 // 单词的最大个数//【宏的定义】
typedef struct word
//单词的结构体 //【结构体】
{
char en[MAX_CHAR]; // 英文形式
char no[MAX_CHAR]; //中文形式
}word; //【结构体类型定义】
word s[MAX_NUM]; //单词数组//【数组】
int num; //单词个数
void read_from_file()
//从文件中读取单词的信息//【文件的读写】
{
FILE *fp;
int i=0;
fp=fopen("data.txt","rb");
if(!fp)
{
return ;
}
fread(&num,1,sizeof(num),fp); //先读取单词的个数
for(i=0;i<num;i++) //【循环结构】
fread(&s[i],1,sizeof(word),fp); //读取每个单词的信息存放到结构体
fclose(fp);//关闭文件
}
void write_to_file()
//从文件中读取单词的信息
{
FILE *fp; //【指针的使用】
int i=0;
fp=fopen("data.txt","wb+");
if(!fp)
{
return ;
}
fwrite(&num,1,sizeof(num),fp); //先写入单词的个数
for(i=0;i<num;i++)
fwrite(&s[i],1,sizeof(word),fp); //写入每个单词的信息
fclose(fp); //【关闭文件】
}
void add_infor()//添加单词信息
{
int a,i=num;
printf("请输入单词的英文形式:");
scanf("%s",s[i].en);
printf("请输入单词的中文形式:");
scanf("%s",s[i].no);
num++;
printf("您输入的信息为: 英文: %s 中文: %s \n Enter 0 继续输入; Enter 1 返回主菜单",s[i].en,s[i].no);
}
void del_infor()//删除单词信息
{
int i=0,j=0;
char no[MAX_CHAR]; //中文形式
printf("请输入你要删除的单词中文形式:");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该中文形式对应的序号
if(strcmp(s[i].no,no)==0)
{
for(j=i;j<num-1;j++)
s[j]=s[j+1];
num--; //数量减少 1
return;
}
printf("没有这个单词!");
printf("Enter Enter 1 返回主菜单");
}
void modify_infor()//修改单词信息
{
int i=0;
char no[MAX_CHAR]; //中文形式
printf("请输入你要修改的单词中文形式:");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该中文形式对应的序号
if(strcmp(s[i].no,no)==0)
{
printf("请输入单词正确的英文形式:");
scanf("%s",s[i].en);
printf("请输入此单词正确的的中文形式:");
scanf("%s",s[i].no);
return;
}
printf("没有这个单词!");
printf("Enter Enter 1 返回主菜单");
}
void show_infor()
{int i=0;
printf("单词: 英文 中文 \n");
for(i=0;i<num;i++)
printf(" %10s%10s\n",s[i].en,s[i].no);
printf("Enter Enter 1 返回主菜单");
}
void search_infor()//查询单词
{
int i=0;
char no[MAX_CHAR]; //中文形式
printf("请输入你要查询的单词中文形式:");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该中文形式对应的序号
if(strcmp(s[i].no,no)==0)
{
printf("英文形式 中文形式 \n");
printf("%10s%12s\n",s[i].en,s[i].no);
return;
}
printf("没有这个中文形式!");
printf("Enter Enter 1 返回主菜单");
}
void zy_infor()
{
char b1[20];
int z,d=0,c=0;
int i;
i = rand()%num;
printf("【%s】请输入英文单词:",s[i].no);
scanf("%s",b1);
for(z=0;strcmp(b1,s[i].en)!=0;z=z)
{printf("输入错误!!请重新输入:");scanf("%s",b1);c=c+1;}
printf("\n恭喜你,回答正确,加10分!\n\n");d=d+1;
printf("Enter 2 继续输入; Enter 1 返回主菜单",s[i].en,s[i].no);
}
void yz_infor()
{
char b1[20];
int z,x=41,d=0,c=0;
int i;
i = rand()%num;
printf("【%s】请输入中文意思:",s[i].en);
scanf("%s",b1);
for(z=0;strcmp(b1,s[i].no)!=0;z=z) //【循环结构】
{printf("输入错误!!请重新输入:");scanf("%s",b1);c=c+1;}
printf("\n恭喜你,回答正确,加10分!\n\n");d=d+1;
printf("\n Enter 3 继续输入; Enter 1 返回主菜单",s[i].en,s[i].no);
}
void chengji_infor()
{
int c,d;
printf("\n 共计输入错误:%d次 **每次扣10分**\n",c);
printf(" 共计输入正确:%d次 **每次加10分**\n",d);
printf(" 你的总得分为:%d分\n\n",10*d-10*c);
printf("Enter Enter 1 返回主菜单");
}
void show_main_menu()
{
printf("\n");
printf(" 背 单 词 系 统 \n");
printf(" \n");
printf(" 作者 : 20121829 刘畅 \n");
printf(" \n");
printf(" 1、添加单词信息 2、删除单词信息 \n");
printf(" \n");
printf(" 3、修改单词信息 4、显示单词信息 \n");
printf(" \n");
printf(" 5、背诵(中至英) 6、背诵(英至中) \n");
printf(" \n");
printf(" 7、查询成绩 8、退出 \n");
//用户界面
printf(" 请选择您需要的操作序号(1-8)按回车确认:");
}
int main()
{
int a,choose=0;
num=0;//初始化单词个数为0
read_from_file(); //读取文件
show_main_menu();
scanf("%d",&choose);
printf("\n");
while(choose!=8)
{
switch(choose)// //【选择结构】
{
case 1:
add_infor();break;
case 2:
del_infor();break;
case 3:
modify_infor();break;
case 4:
show_infor();break;
case 5:
zy_infor();break;
case 6:
yz_infor();break;
case 7:
chengji_infor();break;
}
while (a<10000){scanf("%d",&a);
if(a==0){
write_to_file();
add_infor();}
if(a==1)
{printf("\n");
write_to_file();
main();
printf("\n");}
if(a==2)
{
write_to_file();
zy_infor();}
if(a==3)
{
write_to_file();
yz_infor();}
if(a>3)
{break;}
}
write_to_file();//写入文件//【写入文件】
}
printf(" ***************谢谢使用单词背诵系统!再见!*************** \n");
getchar();
return 1;
}
这个程序在计算成绩是结果不正确。。望大神解释一下
[ 本帖最后由 neversayneve 于 2014-6-15 15:46 编辑 ]