标题:C语言求助 在一个大课程中插入一个修改函数陷入了死循环
只看楼主
Amisty最可爱
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-12-22
结帖率:0
已结贴  问题点数:20 回复次数:9 
C语言求助 在一个大课程中插入一个修改函数陷入了死循环
C语言程序全部如下


#include <stdio.h>
#include <string.h>
#define maxsize 20     
struct guest_info
{   char name[8];
    int sum;
    char time[10];
    int number;
}guestlist[maxsize];
void insert(int *);
void search(int);
void update(int);
void show (int);
int main()
{
  int i;
  int count=0;    /// count用来记录订单数目 ,起初订单数目为0.
  do
  {printf("\n");
      printf("1-----插入订单(insert)\n");
      printf("2-----查询订单(search)\n");
      printf("3-----修改订单(update)\n");
      printf("4-----显示订单(show)  \n");
      printf("5-----退出选项(exit)  \n");
      scanf("%d",&i);
      switch(i)
      {case 1:insert(&count);
      break;
       case 2:search(count);
           break;
       case 3:update(count);
           break;
       case 4:show(count);
           break;
       case 5:break;
       default:printf("错误选项,请重选!");break;
      }
  }while(i!=5);
return 0;
}

void insert(int *count)
{int i,in_number;
if(*count==maxsize)
{printf("订单已满!");return;}
printf("请输入编号:");
scanf("%d",&in_number);
for(i=0;i<*count;i++)
if(guestlist[i].number==in_number)
{printf("编号重复!");return;}
guestlist[i].number=in_number;
printf("请输入姓名:");
scanf("%s",&guestlist[i].name);
printf("请输入人数:");
scanf("%d",&guestlist[i].sum);
printf("请输入用餐时间:");
scanf("%s",&guestlist[i].time);
(*count)++;
}

void search(int count)
{int i,number,flag=1;
printf("请输入要查询的编号:");
scanf("%d",&number);
for(i=0;i<count&&flag;i++)
if(guestlist[i].number==number)
{
printf("姓名:%s",guestlist[i].name);
printf("人数:%d",guestlist[i].sum);
printf("用餐时间:%s",guestlist[i].time);
flag=0;
}
else
printf("没有查询到订单!");
}

void update(int count)
{int i,number,flag=1;
printf("请输入要修改的订单编号:");
scanf("%d",&number);
for(i=0;i<count&&flag;i++)
if(guestlist[i].number==number)
{
    printf("请输入人数:");
    scanf("%d",&guestlist[i].sum);
    printf("请输入用餐时间:");
    scanf("%d",&guestlist[i].time);
    flag=0;
}
else
printf("没有查询到可以修改的订单!");
}

void show(int count)
{int i;
printf("\n");
printf("       编号          姓名      人数      用餐时间");
for(i=0;i<count;i++)
{printf("\n%10d",guestlist[i].number);
 printf("%12s",guestlist[i].name);
 printf("%10d ",guestlist[i].sum);
 printf("%12s",guestlist[i].time);
}
}
搜索更多相关主题的帖子: int number count 订单 printf 
2017-12-22 11:21
Amisty最可爱
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-12-22
得分:0 
运行没有问题就是在case3的时候 修改订单 程序运行陷入死循环
2017-12-22 11:22
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:10 
for(i=0;i<count&&flag;i++)
这里应该用||吧
2017-12-22 11:25
Amisty最可爱
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-12-22
得分:0 
回复 3楼 grmmylbs
你看下就是我运行错误部分的截图
2017-12-22 11:40
Amisty最可爱
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-12-22
得分:0 
运行的部分错误截图

2017-12-22 11:40
Amisty最可爱
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-12-22
得分:0 
回复 3楼 grmmylbs
我把&&修改为了|| 在运行的时候出现了下面的情况

2017-12-22 11:46
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:0 
我试了 下是好的啊,奇怪
2017-12-22 11:52
Amisty最可爱
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-12-22
得分:0 
回复 7楼 grmmylbs
你是讲&&改为了||吗
2017-12-22 11:57
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:0 
没改,直接用的你的代码
2017-12-22 13:36
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
得分:10 
找到毛病了。在void update(int count)里
你原来的代码
 printf("请输入用餐时间:");
    scanf("%d",&guestlist[i].time);

你结构体time的定义
程序代码:
struct guest_info
{   char name[8];
    int sum;
    char time[10];
    int number;
}guestlist[maxsize];
等你修改时导致溢出,但没崩溃。返回主函数后到scanf这里就直接跳过,导致死循环。
2017-12-22 15:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483616-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.509246 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved