2017-09-16 25 views
-3

FCFSスケジューリングアルゴリズムをシミュレートするためのCプログラムを作成しています。コマンドライン引数をファイルとして受け入れ、すべてのプロセスのターンアラウンドタイムと待機時間を計算します。しかし、テキストファイルの値を変数に正しく読み込むことはできません。 は、ここでは、コードCテキストファイルから値を読み取る

#include <stdio.h> 
#define N 50 

int main(int argc, char** argv) 
{ 
    int i = 0; 
    char line[20]; 
    int n=0; 
    typedef struct 
    { 
      char name; //process name 
      int at; //arrive time 
      int pt; //process time 
      int ft; //finish time 
      int rt; //round time 
      int wt; //wait time 
    } Process; 
    Process pcs[N]; 

    FILE* file = fopen(argv[1], "r"); 
    while (fgets(line,sizeof(line),file) != NULL) 
    { 
      sscanf(line, "%s %d %d", pcs[i].name, pcs[i].at, pcs[i].pt); 
      line[strlen(line)-1] = '\0'; 
      printf("%s %d %d\n",pcs[i].name, pcs[i].at, pcs[i].pt); 
      i++; 
    } 
    fclose(file); 
    pcs[0].ft=pcs[0].at+pcs[0].pt; 
    pcs[0].rt=pcs[0].ft-pcs[0].at; 
    pcs[0].wt=0; 
    for (n;n<4;n++) 
    { 
      if (pcs[n].at<pcs[n-1].ft) 
      { 
        pcs[n].ft=pcs[n-1].ft+pcs[n].pt; 
        pcs[n].rt=pcs[n].ft-pcs[n].at; 
        pcs[n].wt=pcs[n-1].ft-pcs[n].at; 
      } 
      else 
      { 
        pcs[n].ft=pcs[n].at+pcs[n].pt; 
        pcs[n].rt=pcs[n].ft-pcs[n].at; 
        pcs[n].wt=pcs[n-1].ft-pcs[n].at; 
      } 
    } 
      int x = 0; 
    for (x;x<n;x++) 
    { 
      printf("process name: %s", pcs[x].name); 
      printf("Turnaround Time: %d", pcs[x].rt); 
      printf("Wait Time: %d\n", pcs[x].wt); 
    } 
    return(0); 
} 

は、ここで入力ファイル

input

、出力は任意のヘルプやアドバイスを

output

のおかげでされています。アルクで指摘したように

+1

) 'char型のNAME'店***正確に一つの***の文字、それはそれです。 b。)コンパイラの警告を深刻に受けてください。 – alk

+1

すべての警告とデバッグ情報( 'gcc -Wall -Wextra -g')でコンパイル**デバッガを使用する**' gdb' –

+0

アドバイスをいただきありがとうございます。問題が解決しました。 – harry

答えて

2

、あなたには、いくつかのミスをやっている:あなたの構造体宣言で

  1. を(ループがfgetsを含みながら)あなたは、あなたがしている1つの文字としてnameを宣言したが、あなたのファイルにコードを読んでいます文字列用の%sを渡すので、char nameではなく、char name[SIZE]に宣言を変更してください。 Bdwコンパイラの警告を読んで、それを理解しようとするのは、それが問題を作り出しているからです。
  2. あなたがsscanfで変数のアドレスを渡すことになって、それは変種だ、そうにライン26に変更されています。 sscanf(line, "%s %d %d", pcs[i].name, &pcs[i].at, &pcs[i].pt);
+0

アドバイスをいただきありがとうございます。問題が解決しました。 – harry

関連する問題