prog en C a corriger pour VENDREDI !!!

prog en C a corriger pour VENDREDI !!! - Programmation

Marsh Posté le 13-03-2002 à 22:37:12    

bon étant donné que ces put1 de salles unix sont totalement occupé je peux pas corriger mon prog. Donc bah j'ai besoin de vous !!! le but de ce prog ce de prendre des chiffres dans un fichier et de les traiter de la façon suivante :
pour un 0 on stop tout et on affiche les résultats avant d'enregistrer.
pour un 1 : une voiture passe et on incrément le nombre de voiture.
pour un 2 : c une unité de temps. bref un 2 peut correspondre à 1 sec par exemple. c le temps de passage entre deux véhicules. on gardera en mémoire le temps maximale séparant deux véhicule (c'est à dire le nombre maximale de 2 entre deux 1 ou entre un 1 et un 0).
Bon bah voilà le prog now :  
 
#include <stdio.h>
#include <stdlib.h>
main()
{
 FILE *fichier_entre ;
 FILE *fichier_sortie ;
 int entier_lu ;
 int entier_ecrit ;
 char chemin_entre[80] ;
 char chemin_sortie[80] ;
 int tpsVehicule = 0, tpsVehiculeBoucle = 0, tpsTotal = 0, tpsVehiculeTemp = 0, nbrErrone = 0, nbVehicule = 0 ;
 
 /* Saisie des noms des fichiers */
 printf("\033[2J" ) ;  
 printf("Entrer le nom du fichier d'entree : " ) ;
 gets(chemin_entre) ;
 if ((fichier_entre = fopen(chemin_entre, "r" )) != null)
  {
    printf("\nLe fichier n'existe pas" );
    exit ;
  }
 while ((entier_lu = fgetc(fichier_entre)) != EOF || 0)  
  {
    switch(entier_lu)
      {
        case 0 : break ;
        case 1 : {  
            nbVehicule++ ;
            if tpsVehicule < VehiculeTemps  
              {
                tpsVehicule = tpsVehiculeTemp ;
                tpsVehiculeTemp = 0;
              }
            break ;
             }
        case 2 : {
            tpsVehiculeTemp++ ;
            tpsTotal++ ;
            break ;
             }
        default : {
             printf("\nNombre errone !" ) ;
             nbrErrone++ ;
             break ;
           }
       }
  }
 fclose(fichier_entre) ;
 printf("\033[2J" ) ;  
 printf("Temps Total : %d.", &tpsTotal) ;
 printf("\nNombre de vehicule passe : %d.", &nbVehicule) ;
 printf("\nTemps vehicule : %d.", &tpsVehicule) ;
 printf("\nNombre errone entre : %d.", &nbrErrone) ;
 printf("\n\nEntre le chemin de sortie : " ) ;
 gets(chemin_sortie) ;
 fichier_sortie=fopen(chemin_sortie, "w" ) ;
 fputc(tpsTotal, fichier_sortie) ;
 fputc(tpsVehicule, fichier_sortie) ;
 fputc(nbrErrone, fichier_sortie) ;
 fclose(fichier_sortie) ;
 printf("\nEnregistrement finit." ) ;
}


---------------

Reply

Marsh Posté le 13-03-2002 à 22:37:12   

Reply

Marsh Posté le 13-03-2002 à 23:33:27    

Ben voyons

Reply

Marsh Posté le 13-03-2002 à 23:49:20    

Tu doutes de rien toi  :lol:


---------------
Yoko, our beloved Meuh - R.I.P ( 27/06/2004 )
Reply

Marsh Posté le 13-03-2002 à 23:55:20    

ben deja  
 

Citation :

if ((fichier_entre = fopen(chemin_entre, "r" )) != null)
 {  
   printf("\nLe fichier n'existe pas" );  
   exit ;  
 }  


 
c un peu louche

Reply

Marsh Posté le 13-03-2002 à 23:56:54    

et sur le 0 tu sors pas

Reply

Marsh Posté le 14-03-2002 à 07:09:46    

petit modification :  
 
#include <stdio.h>
#include <stdlib.h>
main()
{
 FILE *fichier_entre ;
 FILE *fichier_sortie ;
 int entier_lu ;
 int entier_ecrit ;
 char chemin_entre[80] ;
 char chemin_sortie[80] ;
 int tpsVehicule = 0, tpsVehiculeBoucle = 0, tpsTotal = 0, tpsVehiculeTemp = 0, nbrErrone = 0, nbVehicule = 0 ;
 
 /* Saisie des noms des fichiers */
 printf("\033[2J" ) ;  
 printf("Entrer le nom du fichier d'entree : " ) ;
 gets(chemin_entre) ;
 if ((fichier_entre = fopen(chemin_entre, "r" )) != null)
  {
    printf("\nLe fichier n'existe pas" );
    exit ;
  }
 while ((entier_lu = fgetc(fichier_entre)) != EOF || 0)  
  {
    switch(entier_lu)
      {
        case 0 : {
            exit ;
            break ;
             }  
        case 1 : {  
            nbVehicule++ ;
            if tpsVehicule < VehiculeTemps  
              {
                tpsVehicule = tpsVehiculeTemp ;
                tpsVehiculeTemp = 0;
              }
            break ;
             }
        case 2 : {
            tpsVehiculeTemp++ ;
            tpsTotal++ ;
            break ;
             }
        default : {
             printf("\nNombre errone !" ) ;
             nbrErrone++ ;
             break ;
           }
       }
  }
 fclose(fichier_entre) ;
 printf("\033[2J" ) ;  
 printf("Temps Total : %d.", &tpsTotal) ;
 printf("\nNombre de vehicule passe : %d.", &nbVehicule) ;
 printf("\nTemps vehicule : %d.", &tpsVehicule) ;
 printf("\nNombre errone entre : %d.", &nbrErrone) ;
 printf("\n\nEntre le chemin de sortie : " ) ;
 gets(chemin_sortie) ;
 fichier_sortie=fopen(chemin_sortie, "w" ) ;
 fputc(tpsTotal, fichier_sortie) ;
 fputc(tpsVehicule, fichier_sortie) ;
 fputc(nbrErrone, fichier_sortie) ;
 fclose(fichier_sortie) ;
 printf("\nEnregistrement finit." ) ;
}


---------------

Reply

Marsh Posté le 14-03-2002 à 09:15:37    

LordAnkou a écrit a écrit :

 
 while ((entier_lu = fgetc(fichier_entre)) != EOF || 0)  
  {
    switch(entier_lu)
      {
        case 0 : {
            exit ;
            break ;

             }  
         




 
EOF || 0 ???? moi j'écrirais plutot :
while ((entier_lu = fgetc(fichier_entre)) != EOF || (entier_lu = fgetc(fichier_entre)) != 0)
 
quant au break après l'exit, je doute de son utilité

 

[jfdsdjhfuetppo]--Message édité par Harkonnen--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 14-03-2002 à 11:30:24    

hors-sujet, mais moi j'écrirais plustôt:
 
while( entier_lu = fgetc(fichier_entre), !feof(fichier_entre) )
{
}
c encore plus propre.
le EOF est déclenché lorsque l'on dépasse la fin d'un fichier, non pas quand on lit le dernier octet. (mais normallement l'autre écriture doit marcher)
mais surtout faire un  
(entier_lu = fgetc(fichier_entre)) != EOF
tu peut te faire baiser si l'entier_lu est un char et pas un int (et là le EOF ne rentre pas dans un char, et le compilo te dis rien et tu tournes en boucles à l'infini)

Reply

Marsh Posté le 14-03-2002 à 12:21:58    

bjone a écrit a écrit :

hors-sujet, mais moi j'écrirais plustôt:
 
while( entier_lu = fgetc(fichier_entre), !feof(fichier_entre) )
{
}
c encore plus propre.
le EOF est déclenché lorsque l'on dépasse la fin d'un fichier, non pas quand on lit le dernier octet. (mais normallement l'autre écriture doit marcher)
mais surtout faire un  
(entier_lu = fgetc(fichier_entre)) != EOF
tu peut te faire baiser si l'entier_lu est un char et pas un int (et là le EOF ne rentre pas dans un char, et le compilo te dis rien et tu tournes en boucles à l'infini)  




 
rien à ajouter  :jap:  :jap:

Reply

Marsh Posté le 14-03-2002 à 12:29:16    

hof c juste une chtite convention perso pour ne pas me faire baiser lors de tests de boucles, idem j'aime bien pour les ouvertures de fichiers
 
if( hdl=fopen(file,"r" ), !hdl )
    perror(file),exit(1);
 
je trouve ça très lisible tout en étant compact.
fo po oublier que dans les if, while.... tu peux faire des ( op 1, op2, op3,..., condition de test)

Reply

Marsh Posté le 14-03-2002 à 12:29:16   

Reply

Marsh Posté le 14-03-2002 à 12:30:30    

au fait c quoi son problème à LordAnkou ?

Reply

Marsh Posté le 14-03-2002 à 12:32:28    

bonne question au fait..... parce que la, à part des syntax error, je vois pas ce qui cloche  :lol:

Reply

Marsh Posté le 14-03-2002 à 13:13:35    

bah en fait je pouvais pas le tester car toutes les salles unix sont submergés avant de rendre les progs donc bah je demandais conseil à des gens qui s'y connaissent. En tout cas merci tout le monde.  :)


---------------

Reply

Marsh Posté le 14-03-2002 à 14:21:50    

de toutes façon, ton truc tu l'attrappes sous n'importe quel compilo sous n'importe quel os, ça devrait marcher...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed