[英]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.