簡體   English   中英

為什么不保存我的變量? 我一直在測試此代碼,但我的變量未保存到結構數組中

[英]Why aren't my variables being saved? I've been testing this code and my variables aren't being saved into my struct array

這是我的代碼和變量的輸出:我還需要添加其他內容到while循環中,以使變量和方法正常工作。

int main() {
  FILE *ifp;
  ifp = fopen("processes.txt","r");
  if(ifp == NULL) {
      printf("Error Opening file.\n");
      exit(1);
  }

  char str[100];
  int i=0;

  while(fgets(str, 100, ifp) != NULL) {
    fscanf(ifp," %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].duration, &arr[i].rank);
    i++;
  }
}
printf("ProceId AT   duration rank\n");

for (int j = 0; j < i - 1; ++j){
    printf("%d\t%0.1f\t%d\t%d\n",arr[j].pid,arr[j].AT,arr[j].duration,arr[j].rank );
}


ProceId AT   duration rank
1398    0.0     0       0
2306    0.0     0       0
3219    0.0     0       0
4478    0.0     0       0
5653    0.0     0       0
6399    0.0     0       0
7777    0.0     0       0

這是有一行不需要的字符串的文件,這就是為什么我使用fgets的原因。

ProcessID   ArrTime Duration  Rank

1398        1.0     16      3
2306        4.5     6       7
3219        3.0     11      1
4478        2.0     3       5
5653        3.5     7       2
6399        4.0     8       6
7777        2.5     17      8   

更改此:

fscanf(ifp," %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].duration, &arr[i].rank);

對此:

fscanf(ifp," %d %f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].duration, &arr[i].rank);

因為您使用的是無效的轉換說明符。

下次要注意編譯器警告,它們通常會講述整個故事:

warning: invalid conversion specifier '.'
      [-Wformat-invalid-specifier]
        fscanf(ifp," %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].d...
                       ~~~^
warning: format specifies type 'int *' but the argument has type
      'float *' [-Wformat]
        fscanf(ifp," %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].d...
                              ~~                   ^~~~~~~~~~
                              %f
warning: data argument not used by format string
      [-Wformat-extra-args]
  ..." %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].duration, &arr[i].ra...
     ~~~~~~~~~~~~~~~~~                                             ^

警告提示由於無效的轉換說明符, %d格式說明符用於結構體的float字段(名為AT ),然后一切都變得一團糟,因為您缺少一個格式說明符...

如何僅在scanf中接受某個精度(這么多小數位)中閱讀更多內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM