本人c语言小白,请求大神帮帮忙
#include<stdio.h>#include<string.h>
#define N 1000
struct Machine//定义结构体
{
charno;//设备编号
charkind;//设备种类
charname;//设备名称
float price;//设备价格
charbuyday;//设备购入日期
charjudge;//判断设备是否报废
charscrapday;//如果报废,则报废日期是多少
};
void input(Machine a[],int n);//对设备信息的录入
void output(Machine a[],int n);//对设备信息的输出
void modify(Machine a[],int n); //修改设备信息
intsearchno(Machine a[],int n,char x[]);//根据设备编号找需要修改的设备
void search(Machine a[],int n);//查询设备的信息
void tj(Machine a[],int n);//统计设备信息
void kindtj(Machine a[],int n);//按种类统计
void scraptj(Machine a[],int n);//按报废统计
void save(Machine a[],int n);//保存数据到文件中
void read(Machine a[],int n);//从文件中读入数据
int menu();//显示菜单
void tj(Machine a[],int n)//统计设备
{
int choice,s;
printf("请选择统计方法:1 按设备种类统计 2 按设备报废统计 0 退出\n");
scanf("%d",&s);
while(1)
{
switch(s)
{
case 1: kindtj(a,n);break;
case 2: scraptj(a,n);break;
case 0:return;
default:printf("你的输入错误!无法执行!请重输!\n");break;
}
}
printf("统计完成!\n");
}
void kindtj(Machine a[],int n)//按照种类统计
{
char b;
int i,j,c,v={0};
for(i=0;i<n;i++)
{
c=0;
strcpy(b,a.kind);
for(j=0;j<n;j++)
{
if(strcmp(b,a.kind)==0 && v==0)
{c++;v=1;}
}
printf("%s一共有:%d\n",b,c);
}
}
void scraptj(Machine a[],int n)//按照是否报废统计
{
char b="yes";
int i,c=0,d=0;
for(i=0;i<n;i++)
{
if(strcmp(b,a.judge)==0) c++;
else d++;
}
printf("报废一共有%d个\n",c);
printf("完好一共有%d个\n",d);
}
这是我的课程设计
其中的统计函数,用main函数调用后,输出之后,无限循环输出,不能正常输出
求助在座各位帮我看看
由于代码太长我只截取了一部分,如果还需要哪点请给我说下,非常感谢能帮我看看的大家!!!! void tj(Machine a[],int n)//统计设备
{
int choice,s;
printf("请选择统计方法:1 按设备种类统计 2 按设备报废统计 0 退出\n");
scanf("%d",&s);
while(1)
{
switch(s)
{
case 1: kindtj(a,n);break;
case 2: scraptj(a,n);break;
case 0:return;
default:printf("你的输入错误!无法执行!请重输!\n");break;
}
}
printf("统计完成!\n");
}
================================
在你的统计函数里面,除了输入为0可正常跳出循环,其余输入皆为死循环;
即只有一次输入机会判定后续动作;不可正常跳出
//PS:请仔细阅读switch(){case}中的break到底是跳转出那个语句 CodingCat_k 发表于 2020-6-2 08:17
void tj(Machine a[],int n)//统计设备
{
int choice,s;
int main()
{
Machine a;
int n;
scanf("%d",&n);
getchar();
int choice;
while(1)
{
choice=menu();
switch(choice)
{
case 1: input(a,n);break;
case 2: output(a,n);break;
case 3: search(a,n);break;
case 4: modify(a,n);break;
case 5: tj(a,n);break;
case 6: save(a,n);break;
case 7: read(a,n);break;
case 8: printf("感谢你的使用!"); return 0;
default:printf("输入错误!");break;
}
}
return 0;
} CodingCat_k 发表于 2020-6-2 08:17
void tj(Machine a[],int n)//统计设备
{
int choice,s;
这是我的main函数
达.芬奇 发表于 2020-6-2 08:26
这是我的main函数
main的逻辑没错,除了上述的tj函数存在死循环之外不知道暂时没看出其它点;
或者你可以检测输入哪个选项出现死循环,再定位到相关的函数。 没有问题了就结帖吧。
页:
[1]