鱼C论坛

 找回密码
 立即注册
查看: 720|回复: 5

[已解决]本人c语言小白,请求大神帮帮忙

[复制链接]
发表于 2020-6-2 08:08:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<string.h>
#define N 1000
struct Machine//定义结构体
{
char  no[20];//设备编号
char  kind[10];//设备种类
char  name[20];//设备名称
float price;//设备价格
char  buyday[10];//设备购入日期
char  judge[10];//判断设备是否报废
char  scrapday[10];//如果报废,则报废日期是多少
};
void input(Machine a[],int n);//对设备信息的录入
void output(Machine a[],int n);//对设备信息的输出
void modify(Machine a[],int n); //修改设备信息
int  searchno(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[20];
int i,j,c,v[1000]={0};
for(i=0;i<n;i++)
{
  c=0;
  strcpy(b,a[i].kind);
  for(j=0;j<n;j++)
  {
   if(strcmp(b,a[j].kind)==0 && v[i]==0)
   {c++;v[j]=1;}
  }
  printf("%s一共有:%d\n",b,c);
}
}

void scraptj(Machine a[],int n)//按照是否报废统计
{
char b[10]="yes";
int i,c=0,d=0;
for(i=0;i<n;i++)
{
  if(strcmp(b,a[i].judge)==0) c++;
  else d++;
}
printf("报废一共有%d个\n",c);
printf("完好一共有%d个\n",d);
}




这是我的课程设计
其中的统计函数,用main函数调用后,输出之后,无限循环输出,不能正常输出
求助在座各位帮我看看
由于代码太长我只截取了一部分,如果还需要哪点请给我说下,非常感谢能帮我看看的大家!!!!
最佳答案
2020-6-2 08:17:57
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到底是跳转出那个语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-2 08:17:57 | 显示全部楼层    本楼为最佳答案   
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到底是跳转出那个语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 08:24:53 | 显示全部楼层
CodingCat_k 发表于 2020-6-2 08:17
void tj(Machine a[],int n)//统计设备
{
int choice,s;

int main()
{
Machine a[N];
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 08:26:01 | 显示全部楼层
CodingCat_k 发表于 2020-6-2 08:17
void tj(Machine a[],int n)//统计设备
{
int choice,s;

这是我的main函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 08:35:44 | 显示全部楼层

main的逻辑没错,除了上述的tj函数存在死循环之外不知道暂时没看出其它点;
或者你可以检测输入哪个选项出现死循环,再定位到相关的函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 10:02:30 | 显示全部楼层
没有问题了就结帖吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 09:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表