【发布时间】:2022-01-04 07:49:29
【问题描述】:
我正在尝试编写一个程序:
- 打开一个txt文件
- 读取一行的第一个单词并将其存储在变量(或数组)中 => 它将是一个名称
- 读取一行的第二个单词并将其存储在 var/array 中 => 这将是一个大学系
- 为每一行执行此操作,以便遍历整个文件
我尝试将 printf("%s", variable) 添加到我的代码中以查看它的效果,但结果非常不一致:一次没有任何反应,一次正确,一次正确写但旁边有一个奇怪的符号 (哦,而且,它只适用于代码的部门部分,而不是名称)
这是我的 txt 文件:
Marie GMP
Rodriguez STID
Latreze GEA
Dos-Santos INFO
Coulon GMP
Fernandez INFO
Munoz GEA
Clerc GEA
Delahaye STID
Fernandes STID
Vallet STID
Martineau STID
Langlois GMP
Zinedan STID
Regnier-Laine INFO
Guillot GMP
Meyer-Alexandre TC
Tanguy GMP
Legros GMP
Herve GMP
Robinski STID
Michaud INFO
Barthelemy GMP
Vincent GEA
还有我的代码:
#include <stdio.h>
#include <stdlib.h>
#define TAILLE_TABLE 100
int main() {
char charActuel;
char studentName[TAILLE_TABLE];
char studentDpt[TAILLE_TABLE];
printf("Etudiants faisant du sport ET de la musique\n\n");
FILE* fichierMusique = NULL;
fichierMusique = fopen("data/MUSIQUE.txt", "r");
if (fichierMusique != NULL) {
printf("fichier ouvert\n");
int i = 1;
do {
charActuel = fgetc(fichierMusique);
studentName[i] = charActuel;
printf("%c", charActuel);
i = i + 1;
}
while (charActuel != ' ');
printf("%s-\n", studentName);
i = 1;
do {
charActuel = fgetc(fichierMusique);
studentDpt[i] = charActuel;
printf("%c", charActuel);
i = i + 1;
}
while (charActuel != '\n');
printf("%s\n", studentDpt);
fclose(fichierMusique);
printf("fichier fermé");
}
else {
printf("Impossible d'ouvrir le fichier MUSIQUE.txt");
}
return 0;
}
你看出问题出在哪里了吗?
【问题讨论】:
-
一个问题是名称“Meyer-Alexandre”不适合大小为 15 的数组。我会将
TAILLE_TABLE的定义更改为至少 100。你需要放置一个 NUL终止符'\0'在字符串的末尾,或printf和"%s"将不起作用。 -
我刚刚修好了谢谢,不幸的是我认为这不是唯一的问题
-
另外,
i需要从 0 开始,因为 C 中的数组从 0 开始索引。 -
我认为这是问题所在,因为它现在可以工作了,谢谢
-
请从工作代码中创建一个答案。或者删除问题。
标签: c printf scanf fopen fgetc