显然,这是一个非常简单的任务,但是到目前为止,我一直在为此苦苦挣扎。
我正在初始化一系列结构。每个结构都是由两个数组组成。
然后,我试图从文件中读取并填充我的结构数组。 该文件由字符串组成,类似于:
sign1 path1
sign2 path2
sign3 path3
在填充然后打印阵列时遇到问题。 非常感谢您的帮助。 谢谢!
typedef struct {
char firma[333];
char path[100];
}riga;
void riempi_riga(riga* r, FILE* f1) {
//fscanf(f1, "%s %s\n", r->firma, r->path);
fgets(r->firma, 33, f1);
fgets(r->path, 100, f1);
return;
}
void stampa_riga(riga* r) {
printf("%s %s\n", r->firma, r->path);
return;
}
int num_lines(FILE *f1) {
char c;
int lines = 0;
while ((c = fgetc(f1)) != EOF)
if (c == '\n')
lines++;
if (c != '\n')
lines++;
rewind(f1);
return lines;
}
int main() {
riga* file_firme[1000];
int i = 0;
int j = 0;
FILE* f1;
f1 = fopen("C:\\Users\\blabla\\Desktop\\firmaMD5.txt", "r");
if (f1 == NULL) {
printf("non sono riuscito ad aprire il file!\n");
return 0;
}
int num_righe = num_lines(f1);
for (i; i < num_righe; i++)
riempi_riga(&file_firme[i], f1);
//riempi_riga(r1, f1);
//stampa_riga(r1);
//fflush(f1);
for (j; j < num_righe; j++) {
stampa_riga(&file_firme[j]);
}
if (fclose(f1) != 0)
printf("non sono riuscito a chiudere il file\n");
return 0;
}
答案 0 :(得分:0)
您的输入似乎在sign path
行中,其中“符号”和“路径”之间用空格隔开。您可以使用fgets
阅读整行,然后调用strtok
获取这两个标记。此代码未经测试。
void riempi_riga(riga* r, FILE* f1)
{
char *tok;
char buf[sizeof(r->firma)+sizeof(r->path)];
if (fgets(buf, sizeof(buf), f1) != NULL)
{
if ((tok = strtok(buf)) != NULL)
{
strncpy(r->firma, tok, sizeof(r->firma));
r->firma[sizeof(r->firma)-1]=0;
if ((tok = strtok(NULL)) != NULL)
{
strncpy(r->path, tok, sizeof(r->path));
r->path[sizeof(r->path)-1]=0;
}
}
}
}