J'essaie de lire dans un fichier texte simulant la planification de la CPU, d'exécuter l'algorithme de planification et d'imprimer la sortie.Comment définir la taille de struct MAX aux lignes analysées à partir du fichier texte
à-dire le numéro d'identification de processus, l'heure d'arrivée, le temps de salve
1 0 3
2 4 6
...
Comment attribuer la taille de la structure à créer avec la quantité de lignes balayées? Puis-je définir MAX comme le nombre de lignes analysées? Je suis capable de scanner le fichier d'entrée et de sortir le fichier, cependant, j'ai ma variable MAX pour la structure définie comme 10000. Le problème avec ceci est qu'il imprime dans le fichier la sortie correcte, mais imprime 0 0 0 jusqu'à 10000 lignes après les lignes d'entrée s'arrêtent. Voici mes fonctions.
#include<stdio.h>
#include<stdlib.h>
#define MAX 10000
typedef struct
{
int pid;
int arrTime;
int burTime;
int finTime;
int waitTime;
int turnTime;
}Process;
Process pTable[MAX];
void readTable(char *fileName, Process pTable[MAX])
{
int i;
FILE *fileIN = fopen(fileName, "r+");
while(!feof(fileIN))
{
fscanf(fileIN, "%d %d %d", &pTable[i].pid, &pTable[i].arrTime, &pTable[i].burTime);
i++;
}
fclose(fileIN);
}
void printTable(char *fileName, Process pTable[MAX])
{
FILE *fileOUT = fopen(fileName,"w+");
for(int i=0; i < MAX;i++)
{
fprintf(fileOUT, "%d %d %d\n",pTable[i].pid, pTable[i].arrTime, pTable[i].burTime);
}
}
int main(int argc, char **argv)
{
readTable(argv[1], pTable);
printTable(argv[2], pTable);
}
Voici la sortie que je donne pour le fichier d'entrée raccourci.
1 0 3
2 4 6
3 9 3
4 12 8
5 13 11
6 18 19
7 19 2
8 23 4
9 28 1
10 31 3
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
En plus: s'il vous plaît voir [Pourquoi « while (feof (fichier)!) » Toujours tort?] (Http://stackoverflow.com/ questions/5431941/why-is-while-feof-file-always-wrong) –
commencez par retourner 'i' à partir de' readtable'. Et vérifiez la valeur de retour 'fscanf': si c'est! = 3 alors vous avez atteint la fin du fichier. –
Lorsque vous produisez la table, écrivez le nombre de lignes réellement lues, pas la capacité max. –