case 1要求如果已有学生信息存入缴费金额,如果没有则先录入信息再存钱
为什么case 1中for和if都运行,目的是什么
num是什么?
i为什么在for里<num,在if里>=num
#include <stdio.h>
#include <string.h>
int main()
{
float money[100];
char name[100][100];
char name_search[100];
int a,i,num=3;
float paid;
while(a!=2)
{
printf("*** 0:个人缴费查询 ***\n");
printf("*** 1:班 费 缴 纳 ***\n");
printf("*** 2:退 出 系 统 ***\n");
printf("请输入操作编号(0-2):\n");
scanf("%d",&a);
switch(a)
{
case 0: printf("请输入学生姓名:\n");
scanf("%s",name_search);
for(i=0;i<num;i++)
{
if(strcmp(name[i],name_search)==0)
{
printf("该学生已缴费%f\n",money[i]);
break;
}
}
if(i>=num) printf("查无此人\n");
break;
case 1: printf("请输入学生姓名:\n");
scanf("%s",name_search);
printf("请输入缴费金额:\n");
scanf("%f",& paid);
if(paid<0)
{
printf("输入金额不是正数,缴费失败!\n");
}
else
{
for(i=0;i<num;i++)
{
printf("1111111");
if(strcmp(name[i],name_search)==0)
{
money[i]=money[i]+paid;
break;
}
}
if(i>=num)
{
printf("22222222");
strcpy(name[num],name_search);
money[num]=paid;
num++;
}
printf("缴费成功!\n%s 已缴费 %f\n",name[i],money[i]);
}
break;
case 2:break;
default:printf("错误,请输入0-2\n");break;
}
}
printf("已退出系统\n");
}
case 1: printf("请输入学生姓名:\n");
scanf("%s",name_search);
printf("请输入缴费金额:\n");
scanf("%f",& paid);
if(paid<0) //判断交的钱是不是正数
{
printf("输入金额不是正数,缴费失败!\n");
}
else
{
for(i=0;i<num;i++) //匹配这个学生之前有没有交过费
{
printf("1111111");
if(strcmp(name[i],name_search)==0) //如果匹配成功证明这个学生之前交过费
{
money[i]=money[i]+paid; //将新交的钱与之前交的钱相加更新总数
break; //跳出for循环
}
}
if(i>=num) //如果这个学生之前没有交过费
{
printf("22222222");
strcpy(name[num],name_search); //将他的名字copy进数组里
money[num]=paid; //将他交的钱录入数组
num++; //数组标志位推进一位
}
printf("缴费成功!\n%s 已缴费 %f\n",name[i],money[i]);
}
break;
case 2:break;
default:printf("错误,请输入0-2\n");break;
}
}
printf("已退出系统\n");
for是遍历数组,判断学生是否已经存在,在for循环中,if(strcmp(name[i],name_search)==0)用来判断学生是否已经存在,如果存在,就结束循环。
也就是说:如果学生已经存在,循环就结束了,i肯定小于num,如果学生不存在,i 等于num的时候才会结束循环。
所以,在for循环的后面 的 if(i>=num)语句,就是用来判断学生是否已经存在的,如果学生不存在,就执行{}中的语句,来添加学生。