Aide compréhension programme en C

Fermé
JustinBalle67 Messages postés 2 Date d'inscription mardi 3 mai 2016 Statut Membre Dernière intervention 4 mai 2016 - 3 mai 2016 à 15:58
JustinBalle67 Messages postés 2 Date d'inscription mardi 3 mai 2016 Statut Membre Dernière intervention 4 mai 2016 - 4 mai 2016 à 09:41
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

Utilisateur anonyme
3 mai 2016 à 17:29
Tu peux lire ceci :

https://openclassrooms.com/courses/les-parametres-de-la-fonction-main


et ceci pour les formats de printf :


http://www.cplusplus.com/reference/cstdio/printf/

des questions ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 mai 2016 à 22:50
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
JustinBalle67 Messages postés 2 Date d'inscription mardi 3 mai 2016 Statut Membre Dernière intervention 4 mai 2016
4 mai 2016 à 09:41
Ok merci beaucoup de ton aide !
0