Prob C:Pq mon argc n'est pas pris en compte ?

Conatic -  
akkira Messages postés 24 Statut Membre -
/***************************************************************************/
/* AUTEUR: VAN WINNENDAELE Lionel
/* NOM: entete.c
/* DATE: 28-08-01
/* DESCRIPTION: Programme qui crée des entêtes
/***************************************************************************/

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

int main (int argc , char *argv[]) {

/* Pourquoi l'instruction ci-dessous qui teste si le nombre de parametre est inferieur à 1 ne
s'execute pas ??? */

if (argc<1) printf("Il manque des arguments ......");
if (argv[1]==0) { printf("Il manque des arguments......"); return 0; }

FILE * ptr_file;

char auteur[30];
char nom[20];
char date[10];
char description[255];

//clrscr();
printf("\n****** Programme de création d'entête ******\n");

strcpy(auteur,"VAN WINNENDAELE Lionel");

printf("Nom du programme:");
gets(nom);

printf("Date:");
gets(date);

printf("Description:");
gets(description); // On prefere gets pour pouvoir utiliser des ' ' //
printf("\n");
printf("/****************************************************************************/");
printf("\n/* AUTEUR: %s\n/* NOM: %s\n/* DATE: %s\n/* DESCRIPTION: %s\n",auteur,nom,date,description);
printf("/****************************************************************************/");
getch();

if ((ptr_file=fopen ("c:\\temp\\intro.txt","w"))==NULL)
{
printf("\n***** Erreur lors de l'accès au fichier *****\n");
return 0;
}

fprintf(ptr_file,"/****************************************************************************************/");
fprintf(ptr_file,"\n/* AUTEUR: %s\n/* NOM: %s\n/* DATE: %s\n/* DESCRIPTION: %s\n",auteur,nom,date,description);
fprintf(ptr_file,"/****************************************************************************************/");
fprintf(ptr_file,"\n");

printf("\n\n >>>> Enregistrement effectué <<<< \n\n");
getch();
fclose(ptr_file);

char buff1[50];
strcpy(buff1,"copy c:\\temp\\intro.txt+");
strcat(buff1,argv[1]);
strcat(buff1," ");
strcat(buff1,"tempo.c");

system(buff1);
remove(argv[1]);
rename("tempo.c",argv[1]);

return 1;

}

4 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Ceci devrait fonctionner:

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

    int main (int argc , char *argv[]) {

    /* Pourquoi l'instruction ci-dessous qui teste si le nombre de parametre est inferieur à 1 ne
    s'execute pas ??? */

    if (argc<2) {printf("Il manque des arguments ......\n"); return 1;}

    printf("Mon premier argument %s\n", argv[1]);
    return 0;

    }Il faut se rappeler que argv[0] pointe vers le nom du programme.
    Johan
    0
  2. frederic levillain
     
    en fait ton programme fonctionnait tres bien dès le depart.
    un conseil : qd tu affiches des informations change le contenu afin de ne pas te retrouver avec de fausses erreurs (comme dans ton cas)

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

    int main ( int argc , char *argv[] )
    {

    /* Pourquoi l'instruction ci-dessous qui teste si le nombre de parametre est inferieur à 1 ne
    s'execute pas ???. */
    /* -- en fait ça fonctionne parfaitement -- */

    if ( argc < 1 ) /* -- je confirme ; ce test fonctionne correctement ;) -- */
    printf( "Il manque des arguments (argc)......\n" );
    if ( argv[1] == NULL ) /* -- etant donne que 'argv' est un tableau de pointeurs il vaut mieux tester s'il est a NULL plutot qu'egal a zero. ceci dit je ne vois pas a quoi peut te servir ce test si l'on test le nb d'arguments. -- */
    {
    printf("Il manque des arguments (argv)......\n");
    return 0;
    }
    return 0;
    }
    0
  3. William
     
    Ca ne fait rien car argc est toujours > ou = a 1 (le nom de ton executable) dc ca sert a rien de faire
    if (argc < 1) parce que ce sera tjs faux.
    0