1

ここに画像の説明を入力 を含むファイルから入力を取得しています

  1. 学期ごとのコース数と最大許容コース数
  2. 全コース名(英数字5文字まで)
  3. コース名、提供されたセム、前提条件の数、前提コース。
  4. 最後に -1 と -1 出力は、すべてのコースを完了するための学期の最小数になります。

これは私のコードなので、私が仕事をしたことがわかります。私のコードはコンパイルおよび実行されていますが、コースを完了するための sems の数が表示されません。どこが間違っているのか教えてください

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
#include<ctype.h>

char garbage[12][6];
char courseIdentifier[12][6],prereqIdentifier[12][5][6];
char semOffered[12];
bool done[12];

bool allDone(int);
bool donePrereq(int,int);

int main(void)
{
    FILE *fp;
    fp = fopen("graduate.in","r");
    int n,m,p;
    int i,j,k;
    for(i=0;i<12;i++)
    {
        strcpy(courseIdentifier[i],"");
    }
    for(i=0;i<12;i++)
    {
        for(j=0;j<5;j++)
        {
            strcpy(prereqIdentifier[i][j],"");
        }
    }
    fscanf(fp,"%d %d",&n,&m);// take n,m
    while(n != -1)
    {

        if( !(1<=n && n<=12) || !(2<=m && m<=6) )
        {
            printf("Wrong input");
        }
        for(i=0;i<n;i++) //the list of offered courses
        {
            fscanf(fp,"%s",garbage[i]);
        }
        for(i=0;i<n;i++)
        {
            fscanf(fp,"%s %c %d",courseIdentifier[i],&semOffered,&p);//the name of course, sem,no. of prereqs
            for(j=0;j<p;j++)
            {
                fscanf(fp,"%s",prereqIdentifier[i][j]);
            }
        }

        int sem=1;
        char semNow = 'F';
        for(i=0;i<n;i++)
        {
            done[i]=false;
        }
        while(!allDone(n))
        {
            int count=0;
            //while(count<=m)
            //{
                for(i=0;i<n;i++)
                {
                    if( (semOffered[i]==semNow || semOffered[i]=='B') && donePrereq(p,n))
                    {
                        done[i] = true;
                        count++;
                    }
                }

            //}
            sem++;
            if(semNow=='F')
            {
                semNow='S';
            }
            else if(semNow=='S')
            {
                semNow='F';
            }
        }
        printf("minimum number of semesters = %d\n",sem);
        fscanf(fp,"%d %d",&n,&m);// take n,m
    }
    return 1;
}

bool allDone(int n)
{
    bool returnBool=true;
    int i;
    for(i=0;i<n;i++)
    {
        returnBool = returnBool && done[i];
    }
    return returnBool;

}

bool donePrereq(int p,int n)
{
    bool returnBool=true;
    int i,j;
    for(i=0;i<p;i++)
    {
        for(j=0;j<n;j++)
        {
            if(strcmp(prereqIdentifier[i][j],courseIdentifier[j]) ==0 )
            {
                printf("prereq matched\n");
                returnBool = (returnBool&&done[j]);
            }
        }
    }
    return returnBool;
}
4

1 に答える 1

1

ここで提供される各コースに関する情報を入力してスキャンする場合:

        fscanf(fp,"%s %c %d",courseIdentifier[i],&semOffered,&p);

&semOfferedパラメータが正しくありません。へのポインターを提供する必要がありますcharsemOfferedは の配列であるためchar、おそらくインデックス付きの位置に格納するつもりでした:

        fscanf(fp,"%s %c %d",courseIdentifier[i],&semOffered[i],&p);

これでプログラムが修正されるわけではありませんが、プログラムを完了することができます。

于 2013-07-12T03:45:21.373 に答える