我需要從如下所示的檔案中獲取資料:

然后列印在我的螢屏上。
由于破折號(-),我無法弄清楚如何列印它。
我試過這段代碼:
typedef struct studenti {
char index[10];
char ime[20];
char prezime[20];
int kviz[10];
} studenti;
void init_load() {
int i;
studenti studenti;
FILE *fp;
fp = fopen("studenti_2022.txt", "r");
if(fp == NULL){
printf("Doslo je do greske");
return 0;
}
while(fread(&studenti, sizeof(studenti), 1, fp)){
printf("%s", studenti.index);
printf("%s", studenti.ime);
printf("%s", studenti.prezime);
printf("%d", studenti.kviz);
}
fclose(fp);
}
uj5u.com熱心網友回復:
fread通常用于讀取二進制資料,并且通常是用于文本格式檔案的錯誤函式。除非您已使用 將結構直接寫入檔案fwrite,否則您將需要其他內容。
在這種情況下,你可以使用功能,如fgets,fgetc和fscanf對待檔案的內容文本,并決議已知的格式。
strtok可用于進一步標記字串,并且strtol/sscanf可用于從這些標記中讀取整數。
這是一個粗略的例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char index[10];
char ime[20];
char prezime[20];
int kviz[10];
} student_info;
int get_next_entry(student_info *si, FILE *f) {
if (3 != fscanf(f, "%9sss", si->index, si->ime, si->prezime))
return 0;
char buffer[256];
if (fgetc(f) != '\n' || !fgets(buffer, sizeof buffer, f))
return 0;
size_t i = 0;
char *tok = strtok(buffer, "|");
if (tok) do {
si->kviz[i ] = (int) strtol(tok, NULL, 10);
} while (i < 10 && (tok = strtok(NULL, "|")));
/* make sure we read enough ints, and our delimiting line is there. */
if (i != 10 || !fgets(buffer, sizeof buffer, f) ||
0 != strncmp(buffer, "----------", 10))
return 0;
return 1;
}
int main(void) {
FILE *file = fopen("data.txt", "r");
student_info info;
if (file) while (get_next_entry(&info, file)) {
printf("%s\n%s\n%s\n", info.index, info.ime, info.prezime);
for (size_t i = 0; i < 10; i )
printf("%d ", info.kviz[i]);
putchar('\n');
}
fclose(file);
}
data.txt:
I-0123-45
John
Doe
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
--------------------------------------
I-0042-99
Jane
Doe
1 | 4 | 3 | 2 | 14 | 6 | 3 | 8 | 1 | 11 |
---------------------------------------
輸出:
I-0123-45
John
Doe
1 2 3 4 5 6 7 8 9 10
I-0042-99
Jane
Doe
1 4 3 2 14 6 3 8 1 11
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407616.html
標籤:
