L'écriture et la lecture à partir d'un fichier et de les trier dans l'ordre croissant
#include<stdio.h>
void sort(int *p, int size)
{
int i, j;
for (i = 0; i < size - 1; ++i)
{
for (j = 0; j < size - i - 1; ++j)
{
if (p[j] > p[j + 1])
{
int temp;
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
}
void createtestfile()
{
FILE *f1;
f1 = fopen("program.txt", "w");
fprintf(f1, "6#this is comment\n");
fprintf(f1, "3#this is comment\n");
fprintf(f1, "7#this is comment\n");
fprintf(f1, "2\n");
}
void readtestfile()
{
FILE *fp;
char buff[1024];
int value;
int number_of_lines;
fp = fopen("program.txt", "r");
do
{
fgets(buff, 1024, fp);
fscanf(fp, "%d", &value);
number_of_lines++;
buff[number_of_lines] = value;
} while (fp != EOF);
sort(buff, number_of_lines);
int i;
for (i = 1; i < number_of_lines; i++)
{
printf("value is %d", buff[i]);
}
}
int main()
{
createtestfile();
readtestfile();
return 0;
}
Je suis en train d'écrire une chaîne de caractères dans un fichier. Plus tard, la lecture que des nombres entiers à partir d'un fichier et de les trier dans l'ordre croissant. Je suis en utilisant fgets à la lecture ligne par ligne du fichier et j'ai un problème de lecture que des nombres entiers à partir d'un fichier.
- Sortie : il n'est pas afficher les nombres.
Vous devez vous connecter pour publier un commentaire.
Vous manquent pour fermer le fichier après l'avoir écrit pour elle.
Pour cette raison le contenu le plus probablement va être écrit lors de la final de l'application, car à l'époque sera clsoed implicitement.
Ajouter
après la dernière
fprintf()
danscreatetestfile()
.Deuxièmement, lors de la lecture du fichier, vous devez décider si vous souhaitez utiliser
fgets()
defscanf()
pour lire les données.Ou vous pouvez passer de la lecture à partir du fichier directement à l'aide de
fscanf()
faire unsscanf()
de la "chaîne" que vous lisez l'aide defgets()
.De le faire remplacer
avec
Troisièmement, il n'a pas de sens d'essayer d'écrire ce que vous avez numérisé à partir de
buff
retour àbuff
, au moins parce que vous l'écrasezbuff
dans la prochaine ronde de la lecture de la boucle.Aussi vous passer
buff
àsort()
ce qui devrait rendre le compilateur de crier un grand avertissement.Initialiser le compteur de la boucle
number_of_lines
correctement à0
et l'utilisation d'un tableau d'entiers pour stocker les valeurs numérisées de le contenu du fichier. Cela vous pourrez ensuite passer danssort()
.fgets
consomme ligne, vous devez utilisersscanf
au lieu defscanf
aprèsfgets
Juste pour votre information, vous pouvez trier vos données à l'aide de la fonction intégrée de tri de la fonction qsort.
Voici un exemple: