Aide compréhension programme en C

JustinBalle67 Messages postés 3 Statut Membre -  
JustinBalle67 Messages postés 3 Statut Membre -
Bonjour,

Je suis débutant en programmation et on m'a filé un programme en C que je n'arrive pas très bien à comprendre, notamment les "if" avec les arguments ainsi que la dernière ligne (%05.1lf\t| %010.6lf\t| %012.6lf\t| %012.6lf\). Merci de votre aide.

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char * argv [])
{
double laf, temp, st, ast;
char c;
FILE *in, *out;

if(argc>1)
in = fopen(argv[1], "r");
if(argc==1 || in == NULL)
in = fopen("in.xml", "r");

if (in == NULL) {
fprintf(stderr, "Erreur in\n");
exit(1);
}

if(argc>2)
out = fopen(argv[2], "w");
if(argc<=2 || in == NULL)
out = fopen("out.txt", "w");

if (out == NULL) {
fprintf(stderr, "Erreur out\n");
exit(1);
}
else
{
fprintf(out, "| LAF\t| Temperature\t| Stokes \t\t\t| Antistokes\t\t|\n|\t\t|\t\t\t\t|\t\t\t\t\t|\t\t\t\t|\n"); // structure tab
while ((c = fgetc(in)) != EOF)
{

if(fscanf(in, "<data id=\"1\">%lf,%lf,%lf,%lf</data>", &laf, &temp, &st, &ast) == 4)
fprintf(out, "| %05.1lf\t| %010.6lf\t| %012.6lf\t| %012.6lf\t|\n|\t\t|\t\t\t\t|\t\t\t\t\t|\t\t\t\t|\n", laf, temp, st, ast);
}

return 0;
}


3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    argc vaut 1 si l'utilisateur lance le programme sans argument.
    argc vaut 2 si l'utilisateur lance le programme avec 1 argument.
    etc.

    if(argc>1)
    in = fopen(argv[1], "r");

    Donc, cela signifie que si l'utilisateur lance le programme avec des arguments (1 ou plus), le programme tentera d'ouvrir le fichier mentionné en 1er paramètre.

    if(argc==1 || in == NULL)
    Cela signifie : si l'utilisateur a lancé le programme sans paramètre OU que in vaut NULL (la lecture précédente du fichier a échoué (par exemple fichier inexistant).

    fprintf(out, "| %05.1lf\t| %010.6lf\t| %012.6lf\t| %012.6lf\t|\n|\t\t|\t\t\t\t|\t\t\t\t\t|\t\t\t\t|\n", laf, temp, st, ast);
    %lf n'est pas bon. Il faut utiliser %f.
    Sinon, cela permet de faire du formatage. Par exemple %05.1lf signifie qu'on affiche la partie entière sur 5 positions en paddant avec des 0 à gauche et une décimale.

    Cdlt,
    0
  2. JustinBalle67 Messages postés 3 Statut Membre
     
    Ok merci beaucoup de ton aide !
    0