#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include<windows.h>
typedef struct{
int arrive;//到達時間
int treat;//服務時間
}QNODE;
typedef struct node{
QNODE data;
struct node *next;//佇列中的元素資訊
}LNODE,*QueuePtr;
typedef struct{ //鏈佇列型別
QueuePtr front ; //隊頭指標
QueuePtr rear ; //隊尾指標
} LinkQueue;
void EnQueue(LinkQueue *link,QNODE x)//進佇列
{
LNODE *p=(LNODE*)malloc(sizeof(LNODE));
if(p==NULL) exit(0);
p->data=https://bbs.csdn.net/topics/x;
p->next=NULL;
if(link->front ==NULL)
{
link->front =p;
link->rear =link->front;
}
else
{
(link->rear)->next=p;
link->rear =p;
}
free(p);
}
void DeQueue(LinkQueue *link,QNODE *x)//出佇列
{
LNODE *p=link->front ;
if(link->front ==NULL)
exit(0);
link->front =p->next ;
*x=p->data ;
if(link->front ==NULL)
link->rear =NULL;
free(p);
}
int main()
{
char Fname[100];
FILE *fp;
int have=0,dwaite=0,cwaite=0,count=0,clock=0,finish=0;
QNODE curr,temp;
LinkQueue link;
link.front =NULL;
link.rear =NULL;
printf("輸入檔案名字:");
scanf("%s",Fname);/*輸入裝客戶模擬資料的檔案的檔案名*/
if((fp=fopen("Fname", "r"))==NULL){ /*打開資料檔案*/
printf("檔案打開出錯");
exit(0);
}
have=fscanf(fp,"%d%d",&temp.arrive,&temp.treat);
do{//約定每輪回圈,處理完一位客戶
if(link.front ==NULL&&have==2)
{ //等待佇列為空時
dwaite+=temp.arrive-clock;
clock=temp.arrive;
EnQueue(&link,temp);
have=fscanf(fp, "%d%d",&temp.arrive,&temp.treat);
}
DeQueue(&link,&curr);
count++;
cwaite+=clock-curr.arrive ;
finish=clock+curr.treat ;
while(have==2&&finish>temp.arrive )
{
EnQueue(&link,temp);
have=fscanf(fp, "%d%d",&temp.arrive,&temp.treat);
}
clock+=temp.treat ;
}while(have==2|| link.front!=NULL);
printf("務人員的總空閑時間:%d和客戶的平均等待時間:%d",dwaite,cwaite/count);
fclose(fp);
return 0;
}
uj5u.com熱心網友回復:
if((fp=fopen("Fname", "r"))==NULL){ /*打開資料檔案*/這句有問題,改成:
if((fp=fopen(Fname, "r"))==NULL){ /*打開資料檔案*/你寫的代碼,是要打開檔案名為Fname的檔案,不是你輸入的檔案名,因為變數Fname存放的就是檔案路徑的字串;
uj5u.com熱心網友回復:
但是還是不行,實際上我直接復制了檔案路徑,然后出現了Debug Assertion Failed,大佬麻煩你再看看,謝謝uj5u.com熱心網友回復:
但是還是不行,實際上我直接復制了檔案路徑,然后出現了Debug Assertion Failed,大佬麻煩你再看看,謝謝轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/227429.html
標籤:C語言
上一篇:跪求解
下一篇:小白求解
