Maison >tutoriels informatiques >connaissances en informatique >Comment attribuer des données de fichier à des variables de structure en langage C
/*Le sexe[2] donné ne semble pas correspondre à 4 lettres. . . . . . Mais je comprends le sens de la question.
**Afin de simplifier la programmation, j'ai changé toutes les données de la structure en un tableau de caractères. Si des nombres sont nécessaires, ajoutez simplement une autre étape de conversion** C'est relativement simple et je ne l'écrirai pas en plus. , une structure est utilisée dans le programme Body array, si vous n'êtes pas sûr du nombre de lignes qu'il y a dans le fichier, afin d'économiser de la mémoire, vous pouvez utiliser l'allocation dynamique. Il a été écrit à la hâte, et il n'y a pas de fonction encapsulée, mais il est effectivement utilisable, alors contentez-vous de ~~~
*/
#inclure <...>
struct employ
{
identifiant de char[10];
nom du personnage[10];
char sexe[5];
âge du personnage[5];
char édu[10];
salaire char[5];
adresse char[20];
numéro de caractère[20];
};
int _tmain(int argc, _TCHAR* argv[])
{
char buf[100];
FILE* pf=NULL;
struct employer Ep[10]={};
int drapeau=0;
pf=fopen("employ.dat","r");
si(!pf)
{
printf("L'ouverture du fichier a échoué ! n");
système("pause");
retour -1;
}
pendant(fgets(buf,99,pf))
{
char* pchar=buf;
pour(int i=0;i
{
Ep[flag].id[i]=*pchar;
if(*pchar++==',')
pause;
}
pour(int i=0;i
{
Ep[flag].name[i]=*pchar;
if(*pchar++==',')
pause;
}
pour(int i=0;i
{
Ep[flag].sex[i]=*pchar;
if(*pchar++==',')
pause;
}
pour(int i=0;i
{
Ep[flag].age[i]=*pchar;
if(*pchar++==',')
pause;
}
pour(int i=0;i
{
Ep[flag].edu[i]=*pchar;
if(*pchar++==',')
pause;
}
pour(int i=0;i
{
Ep[flag].wage[i]=*pchar;
if(*pchar++==',')
pause;
}
pour(int i=0;i
{
Ep[flag].address[i]=*pchar;
if(*pchar++==',')
pause;
}
pour(int i=0;i
{
Ep[flag].number[i]=*pchar;
si(!*pchar++)
pause;
}
//printf("%s",buf);
++drapeau ;
}
fclose(pf);
système("pause");
retour 0;
}
Utilisez les fonctions fopen et fscanf pour lire le contenu des fichiers txt et effectuer des opérations simples.
1.Prototype de la fonction Fopen : FILE * fopen(const char * path, const char * mode);
Le premier paramètre de la fonction fopen est le chemin du fichier, et le deuxième paramètre est la méthode d'ouverture. Il existe les méthodes suivantes :
r Ouvrez le fichier en mode lecture seule, le fichier doit exister.
r+ ouvre le fichier en lecture et en écriture, le fichier doit exister.
rb+ ouvre un fichier binaire en lecture et en écriture, permettant de lire les données.
rw+ lecture-écriture ouvre un fichier texte, permettant la lecture et l'écriture.
w Ouvrez un fichier en écriture seule Si le fichier existe, la longueur du fichier sera ramenée à 0, c'est-à-dire que le contenu du fichier disparaîtra. Si le fichier n'existe pas, créez le fichier.
w+ ouvre un fichier lisible et inscriptible Si le fichier existe, la longueur du fichier sera remise à zéro, c'est-à-dire que le contenu du fichier disparaîtra. Si le fichier n'existe pas, créez le fichier.
a Ouvrez les fichiers en écriture seule en mode ajout. Si le fichier n'existe pas, le fichier sera créé. Si le fichier existe, les données écrites seront ajoutées à la fin du fichier, c'est-à-dire que le contenu original du fichier sera conservé. (Caractère EOF réservé)
a+ Ouvrez les fichiers en lecture-écriture en mode ajout. Si le fichier n'existe pas, le fichier sera créé. Si le fichier existe, les données écrites seront ajoutées à la fin du fichier, c'est-à-dire que le contenu original du fichier sera conservé. (Le symbole EOF original n'est pas conservé)
wb Ouvrez ou créez un nouveau fichier binaire en écriture uniquement ; seule l'écriture de données est autorisée.
wb+ read-write ouvre ou crée un fichier binaire, permettant la lecture et l'écriture.
wt+ Lire et écrire Ouvrir ou créer un fichier texte ; permet la lecture et l'écriture.
at+ ouvre un fichier texte en lecture et en écriture, permettant de lire ou d'ajouter des données à la fin du texte.
ab+ ouvre un fichier binaire en lecture et en écriture, permettant de lire ou d'ajouter des données à la fin du fichier.
Les chaînes morphologiques ci-dessus peuvent être ajoutées avec un caractère b, tel que rb, w+b ou ab+ et d'autres combinaisons. Le caractère b est ajouté pour indiquer à la bibliothèque de fonctions que le fichier ouvert est un fichier binaire, pas un fichier texte pur.
Valeur de retour : une fois le fichier ouvert avec succès, le pointeur de fichier pointant vers le flux sera renvoyé. Si l'ouverture du fichier échoue, NULL est renvoyé et le code d'erreur est stocké dans errno.
2.Routine :
1
2
3
4
5
6
7
8
9
10
11
12
#inclure
#define F_PATH "d:\myfile\file.dat"
charc;
intmain(){
FILE*fp=NULL; //Besoin de faire attention
fp=fopen(F_PATH,"r");
if(NULL==fp) return-1; //Pour renvoyer un code d'erreur
while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //Lire le texte et l'imprimer sur la console
fclose(fp);
fp=NULL; //Doit pointer vers null, sinon il pointera vers l'adresse d'origine du fichier ouvert
retour0;
}
La méthode la plus simple consiste à lire ligne par ligne, mais à obtenir uniquement la ligne de données souhaitée. Vous trouverez ci-dessous un exemple simple que j'ai écrit. J'ai tiré des prix trois fois et il n'y a eu aucun doublon.
#inclure
#inclure
#inclure
#define PEOPLE_NUM 10 //Il y a 10 noms dans mon dossier
void get_prize(FILE* fp, char prize_name[])
{
int num;
int i;
fseek(fp, 0, SEEK_SET);
printf("start...n");
num = rand() % PEOPLE_NUM + 1;
pour(i = 0; i
{
fgets(prize_name, 32, fp);
}
printf("%s obtenez le prix!!!n", prize_name);
}
int main()
{
FILE* fp = fopen("name.txt", "r");
int prize_num;
int i;
char prize_name[32] = {0};
srand(heure(0));
pour(i = 0; i
{
printf("n");
get_prize(fp, prize_name);
}
fclose(fp);
retour 0;
}Le fichier ressemble à ceci :
Capture d'écran en cours d'exécution :
Lors de l'écriture de ce type de programme, les fichiers dans lesquels vous enregistrez les noms doivent être soigneusement organisés afin que le programme puisse les traiter facilement. bonne chance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!