Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1338 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probleme de backspace avec fprintf.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de backspace avec fprintf.

n°895760
Chronoklaz​m
Posté le 11-11-2004 à 00:36:13  profilanswer
 

Voilà, j'aimerais faire en sorte que mon prog c, une fois compilé puisse
"réagir" si il est lancé avec des parametres :
 
Exemple :
 
mon.exe (lancé tout seul) => "Aucun parametre !"
 
mon.exe -a (donc 1 parametre) => "Le parametre est a"
 
Une aide serai la bienvenue :)


Message édité par Chronoklazm le 11-11-2004 à 18:18:16
mood
Publicité
Posté le 11-11-2004 à 00:36:13  profilanswer
 

n°895762
chrisbk
-
Posté le 11-11-2004 à 00:38:01  profilanswer
 

Code :
  1. int main(int argc, char **argv)
  2. {
  3. if (argc == 1)
  4.    printf("pas assez de param\n" );
  5. }


n°895764
Chronoklaz​m
Posté le 11-11-2004 à 00:43:40  profilanswer
 

Oui ! Mais si je veux savoir si le perametre donnée correspond bien a un
parametre que j'ai prevu (ou pas) je fait comment ?


Message édité par Chronoklazm le 11-11-2004 à 00:52:28
n°895771
Taz
bisounours-codeur
Posté le 11-11-2004 à 01:24:15  profilanswer
 

tu utilises argv (liste des paramètres de longueur argv) ou tu utilise un truc comme getopt ou libpopt si tu as ça de disponible

n°895772
manatane
En vous remerciant, bonsoir
Posté le 11-11-2004 à 01:25:00  profilanswer
 

Tu te débrouilles avec argv qui contient les valeur des arguments et argc qui contient le nombre des arguments. Attention la valeur contenu dans argv[ 0 ] est le nom du programme donc si argc == 1 => aucun parametre n'a été fourni, comme dans l'exemple précédent.
Sinon tu as les options simples posix genre -a (1 tiret 1 caractère alphanumérique simple) celà te permet d'indiquer une liste d'option à reconnaitre et de les traiter simplement par un switch.
Sinon tu as les options longues GNU dans getopt.h

n°895774
fafounet
Posté le 11-11-2004 à 01:28:21  profilanswer
 

Code :
  1. int main(int argc, char **argv)
  2. {
  3. int i;
  4. for (i = 1; i < argc; i++)
  5.      if (!(verif(argv[i])))
  6.            printf("Catastrophe !!\n" )
  7. return 0;
  8. }


 
Edit : pourquoi quand je veux dire qqchose, y'a 10 personnes qui le disent avant moi ?


Message édité par fafounet le 11-11-2004 à 01:29:56
n°895784
chrisbk
-
Posté le 11-11-2004 à 01:38:47  profilanswer
 

paske on est les meilleurs http://smileyonline.free.fr/images/gif/inclassable/vignette12/thumbnails/SNORKEL_GIF.gif

n°895920
Joel F
Real men use unique_ptr
Posté le 11-11-2004 à 13:25:59  profilanswer
 

y a une librairie qui gere ca tte seule (libarg ou qqc comme ca)

n°895970
Chronoklaz​m
Posté le 11-11-2004 à 14:12:47  profilanswer
 

BIG merci messieurs :)

n°895975
Chronoklaz​m
Posté le 11-11-2004 à 14:19:02  profilanswer
 

Bon, comme j'ai pas envie de polluer le topic de C avec un nouveau sujet,
je vais continuer ici.
 
J'ai un problem d'allocation memoire avec malloc :
 

Code :
  1. void demande_dim(){
  2. int width, height, taille;
  3. unsigned char c, *carray;
  4. printf("Bienvenue dans BIMTAP !\n\nDonnez les dimensions du tableau sous la forme WIDTHxHEIGHT <Entree>:\n\n===>" );
  5. scanf("%dx%d", &width, &height);
  6. taille=((width/8)+1)*height;
  7. printf("\nVous avez donnez les dimensions : (%dx%d)\n\nLa longueur du tableau sera donc de %d elements\n\n",width,height,taille);
  8. if((carray = (unsigned char)malloc(taille * sizeof(unsigned char))) == NULL){
  9.  printf("Allocation demandee impossible !" );
  10. }
  11. else{
  12.  for(c=0;c<60;c++){
  13.   carray[c]=0;
  14.  }
  15. }
  16. }


 
Pour l'instant elle ne renvoi rien ma fonction, le souci n'est pas là.
 
Et le compilo me dit que il faut que j'utilise un "cast" explicite  :heink:  
 
Sous MSVC++ 6 j'ai le message suivant :
 
============================================================================================================
../Projet.cpp(190) : error C2440: '=' : cannot convert from 'unsigned char' to 'unsigned char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
 
Projet.obj - 1 error(s), 0 warning(s)
============================================================================================================


Message édité par Chronoklazm le 11-11-2004 à 14:20:53
mood
Publicité
Posté le 11-11-2004 à 14:19:02  profilanswer
 

n°895976
chrisbk
-
Posté le 11-11-2004 à 14:20:39  profilanswer
 

Code :
  1. carray = (unsigned char)malloc


 
cherche donc l'erreur tout seul [:petrus75]

n°895977
Joel F
Real men use unique_ptr
Posté le 11-11-2004 à 14:20:48  profilanswer
 

le cast devant ton malloc en sert à rien

n°895981
Chronoklaz​m
Posté le 11-11-2004 à 14:22:13  profilanswer
 

oui ok, mais ca beug quand meme.

n°895984
Chronoklaz​m
Posté le 11-11-2004 à 14:23:01  profilanswer
 

Il me dit ca :
 
190) : error C2440: '=' : cannot convert from 'void *' to 'unsigned char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast

n°895985
chrisbk
-
Posté le 11-11-2004 à 14:23:34  profilanswer
 

bin y'a tout qui est un peu foutraque
 

Code :
  1. if((carray = (unsigned char)malloc(taille * sizeof(unsigned char))) == NULL){
  2.          printf("Allocation demandee impossible !" );
  3.    
  4.      }
  5.    
  6.      else{
  7.          for(c=0;c<60;c++){
  8.              carray[c]=0;
  9.          }
  10.      }


 
ton cast sert a rien, mais si tu tiens vraiment a faire un cast alors cast en "unsigned char *" et pas "unsigned char"
 
ensuite, pourquoi 60 ?

n°895987
Chronoklaz​m
Posté le 11-11-2004 à 14:25:04  profilanswer
 

pardon c'est taille qu'il faut a la place de 60, sorry

n°895989
Chronoklaz​m
Posté le 11-11-2004 à 14:27:01  profilanswer
 

et oui suis je bete puisque malloc renvoi un pointeur ... desole.

n°895992
Taz
bisounours-codeur
Posté le 11-11-2004 à 14:29:13  profilanswer
 

#    if((carray = (unsigned char)malloc(taille * sizeof(unsigned char))) == NULL){
#
#         printf("Allocation demandee impossible !" );
#      
#     }
#      
#     else{
#         for(c=0;c<60;c++){
#             carray[c]=0;
#         }
#     }
 
 
 
on comment prendre une page pour écrire
carray = calloc(taille, 1);

n°896140
Chronoklaz​m
Posté le 11-11-2004 à 17:53:24  profilanswer
 

Merci Taz
 
Bon maintenant j'ai un autre mini-souci :cry:  
 
J'ai donc ma fonction suivante :
 

Code :
  1. void sauvegarde(unsigned char tab[], int taille, int width, int height){
  2.   /*Creation du fichier de sauvegarde*/
  3.   fopen("37x12.txt", "w" );
  4.   /*Ecriture dans le fichier de sauvegarde*/
  5.   int i;
  6.   FILE *fp ; /* Variable du flot */
  7.   char filename [ ] = "37x12.txt" ; /* Nom du fichier */
  8.   fp = fopen(filename , "a+" );
  9.   /*On ecrit dans le fichier ce qu'il faut*/
  10.   fprintf(fp, "#define exemple37x12_width 37\n#define exemple37x12_height 12\nstatic unsigned char image_bits1[] = {" );
  11.   for(i=0;i<taille;i++){ /* on parcour le tableau pour afficher le contenu */
  12.    
  13.   if((i%12) == 0){ /*On va a la ligne car on ecrite que 12 valeurs par ligne*/
  14.      
  15.    fprintf(fp,"\n" ); /* On passe à la ligne */
  16.    fprintf(fp,"   " ); /* On laisse 3 espaces */
  17.   }
  18.    
  19. else if((int)tab[i] <= 8)/*On ecrit sur 8 bits*/
  20.  fprintf(fp,"0x0%x, ",tab[i]);
  21.    
  22. else 
  23.  fprintf(fp,"0x%x, ",tab[i]);
  24.    
  25.   }
  26.   fprintf(fp,"\b};" );
  27. }


 
Comme vous l'aurez compris c'est pour mettre le tableau dans un fichier.
Bon quand j'ouvre ce fichier avec notepad ou wordpad j'obtient :
 
#define exemple37x12_width 37
#define exemple37x12_height 12
static unsigned char image_bits1[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x84,  
   0xc4, 0x03, 0x44, 0x84, 0x60, 0x26, 0x04, 0x44, 0x84, 0xa0, 0x25,  
   0x7c, 0x48, 0x20, 0xe4, 0x07, 0x84, 0x48, 0x20, 0x24, 0x04, 0x84,  
   0x20, 0x24, 0x04, 0x84, 0x30, 0x20, 0x24, 0x04, 0x7c, 0x30, 0x20,  
   0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
 
Alors qu'il me faudrait la derniere ligne :
   .........................................................., 0x00};
 
Le probleme c'est que j'ai ce putain de "carré" à la fin, j'ai beau mettre
la sequence d'echappement \b il n'y a rien a faire, pourtant il parait
que fprintf et printf ont exactement les meme seq d'echappements.
 
:fou: :pt1cable: :fou:


Message édité par Chronoklazm le 11-11-2004 à 17:56:17
n°896230
fafounet
Posté le 11-11-2004 à 19:14:30  profilanswer
 

Pourquoi tu crees pas un nouveau sujet plutot que d'allonger ?

n°896235
Taz
bisounours-codeur
Posté le 11-11-2004 à 19:20:57  profilanswer
 

c'est quoi c'est \b ?
 
quand tu fous \n tu t'attend bien à un \n ?
ben pareil pour \b

n°896349
Chronoklaz​m
Posté le 11-11-2004 à 21:06:05  profilanswer
 

fafounet ===> oué je sais cété dans le but de pas poluer le topic C avec des Chronoklazm partout :) mais maintenant j'arrete c'est promis :)
 
Taz ========> et bein NON ya rien a faire \n il capte et \b que dalle, c'est ptet ce foutu MSVC++ qui pige rien ou ptet meme moi :(

n°896356
Ace17
Posté le 11-11-2004 à 21:14:18  profilanswer
 

Hmm faudrait peut etre avoir un minimum de competences avant de dire du mal de MSVC++...  
 
C'est quoi pour toi, le caractere \b ?


Message édité par Ace17 le 11-11-2004 à 21:14:25
n°896359
Chronoklaz​m
Posté le 11-11-2004 à 21:17:37  profilanswer
 

Bon ca va je plaisentais.
backspace
Pourquoi cette question ? :heink:


Message édité par Chronoklazm le 11-11-2004 à 21:20:00
n°896365
Taz
bisounours-codeur
Posté le 11-11-2004 à 21:24:56  profilanswer
 

c'est quoi backspace ?

n°896370
Chronoklaz​m
Posté le 11-11-2004 à 21:27:38  profilanswer
 

C'est \b  :D  
 
Bein c'est le retour d'un caractère en arrière, non ?


Message édité par Chronoklazm le 11-11-2004 à 21:28:10
n°896371
Ace17
Posté le 11-11-2004 à 21:28:19  profilanswer
 

Le carre a la fin de ton fichier, c'est justement le caractere backspace.

n°896372
Ace17
Posté le 11-11-2004 à 21:29:19  profilanswer
 

Chronoklazm a écrit :

C'est \b  :D  
 
Bein c'est le retour d'un caractère en arrière, non ?


Et non  :D  
C'est vrai dans une console, mais dans un fichier... ca n'est rien de plus qu'un malheureux octet qui a pour valeur ASCII 08...

n°896374
Taz
bisounours-codeur
Posté le 11-11-2004 à 21:29:50  profilanswer
 

je crois que y en a qui ont du mal à comprendre le concept de caractère et le rôle de fprintf ...

n°896375
chrisbk
-
Posté le 11-11-2004 à 21:29:57  profilanswer
 

et sous winnt ca fait blue screen [:god]

n°896376
Chronoklaz​m
Posté le 11-11-2004 à 21:32:50  profilanswer
 

Mais pourtant fprintf et printf emploient les mêmes formatages ??!!  
fprintf() envoie une sortie formatée vers un fichier.
C'est quoi ce delire ? \n marche et \b marche pas   :??:


Message édité par Chronoklazm le 11-11-2004 à 21:35:34
n°896378
Ace17
Posté le 11-11-2004 à 21:36:00  profilanswer
 

Code :
  1. FILE* f = fopen("test.txt", "w" );
  2. fprintf(f, "\b\b\b\b" );
  3. fclose(f);


 
Ouvre test.txt avec un editeur hexa, et tu verras ca :  
08 08 08 08
 
Ouvre test.txt avec un editeur de texte, et tu verras quatre carres.
 
Tu peux refaire la meme experience en remplacant \b par \n.


Message édité par Ace17 le 11-11-2004 à 21:37:11
n°896381
Chronoklaz​m
Posté le 11-11-2004 à 21:40:22  profilanswer
 

c'est bon a savoir ca, t'as une idée de comment je pourrais faire ? A part intercepter le cas ou j'ecris le dernier caractere ?

n°896383
chrisbk
-
Posté le 11-11-2004 à 21:41:21  profilanswer
 

ne pas l'ecrire

n°896386
Ace17
Posté le 11-11-2004 à 21:44:32  profilanswer
 

Chronoklazm a écrit :

c'est bon a savoir ca, t'as une idée de comment je pourrais faire ? A part intercepter le cas ou j'ecris le dernier caractere ?


Mais c'est justement ca qu'il faut faire!  :hello:


Message édité par Ace17 le 11-11-2004 à 21:48:00
n°896405
blurk
Posté le 11-11-2004 à 22:03:11  profilanswer
 

En gros tu veux virer la dernière virgule dans la déclaration de tableau que tu génères ?
Eh bien elle est tout à fait autorisée dans la syntaxe du C, justement pour faciliter ce type de génération...

n°896433
Chronoklaz​m
Posté le 11-11-2004 à 22:47:20  profilanswer
 

Ho, du coup j'ai pas a reecire ma boucle for, j'aime le C, merci blurk ! :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probleme de backspace avec fprintf.

 

Sujets relatifs
[PHP - PHPMailer] Problème d'envoie de mail [résolu]Petit probleme avec une requete SQL
probleme avec calcul exponentielVBscript problème de syntaxe
probleme d'espaces dans mon nom de fichierPetit probleme d'indice.
Problème forum PHPbbproblème désallocation mémoire (résolu)
Problème sur preload "pourcentage" !!!Probleme de DLL...
Plus de sujets relatifs à : Probleme de backspace avec fprintf.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR