[英]How can I read data from a file to program
我需要從如下所示的文件中獲取數據:
然后打印在我的屏幕上。
由於破折號(-),我無法弄清楚如何打印它。
我試過這段代碼:
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);
}
fread
通常用於讀取二進制數據,通常是錯誤的 function 用於文本格式文件。 除非您使用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, "%9s%19s%19s", 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 |
---------------------------------------
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.