2017-09-16 171 views
-3

我正在編寫一個c程序來模擬FCFS調度算法。它將接受命令行參數作爲文件並計算每個進程的週轉時間和等待時間。但是它不能將文本文件中的值成功讀入變量。 下面是代碼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

一)'焦炭name'商店***只有一個***字符,這就是它。 b。)認真對待編譯器的警告。 – alk

+1

用所有警告和調試信息編譯('gcc -Wall -Wextra -g')然後**使用調試器**'gdb' –

+0

感謝您的建議。問題解決了。 – harry

回答

2

正如指出爲ALK,你正在做一些錯誤:

  1. 在您的結構聲明您已聲明name爲單個字符,但在你的文件識別代碼(而包含fgets循環)你通過%s這是用於字符串,所以最好將您的聲明更改爲char name[SIZE]而不是char name。 Bdw你應該閱讀編譯器警告並試圖理解它,因爲這就是造成問題的原因。
  2. 你都應該在sscanf傳遞變量的地址和它的變種,所以第26行改爲: sscanf(line, "%s %d %d", pcs[i].name, &pcs[i].at, &pcs[i].pt);
+0

感謝您的建議。問題解決了。 – harry