Forum Clubic

[C]Ignorer retour de chariot

Bonjour, j’ai un petit problème pour ignorer le retour de chariot lorsque je lis un fichier, je vous passe d’abord un exemple de code:


	char buffer[10];
	char* caractere;
	int tab[100];
	for(i=0;i<100;i++)
  tab[i] = 100;
	i=0;
	while(!feof(FicCommandes))
	{
  //Recuperation de la ligne
  fgets(buffer,10,FicCommandes);
  //On separe la ligne selon le caractere d'espacement
  caractere = strtok(buffer, " ");
  //On lit les elements un a un et on les store
  while(caractere != NULL)
  {
  	if(caractere != '\0')
  	tab[i] = atoi(caractere);
  	//Lecture des elements suivants
  	caractere = strtok(NULL, " ");
  	i++;
  }
	}

Le problème vient lorsque le fichier que je lis contient plusieurs retours de chariot à la fin de ce dernier. Bien sûr ici FicCommandes est un FILE*. Il me fait quand même la conversation avec atoi ce qui me donne un 0. Je me demande comment ignorer les multiples retours de chariot qu’il peut y avoir dans le fichier que j’essais de lire et de storer dans un tableau. Je sais que c’est un truc tout con mais je bloque…

Merci à l’avance.

J’ai trouvé une solution qui fonctionne, avant de faire le atoi, je fais un:
if(*caractere != 0x0D)

où 0x0D est le retour de chariot.

Est-ce une bonne manière de faire?

Perso, je ne vois pas d’objection à faire ansi … euh, ainsi :neutre:

C’est la meilleur solution! Tu peux aussi utiliser ‘\n’ à la place de ‘0x0D’ :super:

Oui, le retour chariot cest 0D0A sous windows, donc tu peux aussi jeter les 0x0A si tu scanne un fichier windows (ou Mac)
ça doit être le \r.
:slight_smile:

Tu peux aussi utiliser flex ce qui permettra d’être sûr que tu as bien des nombres valides, parce qu’atoi = bof. (strtol = mieux)

bien vu :clap: :MDR

:ane:

Merci pour vos conseils. Je vais voir à remplacer le atoi. Si j’ai bien compris ce dernier peut renvoyer n’importe quoi à la limite?

Pour le strol, j’ai bien fait mon #include <stdlib.h> mais lorsque je compile il ne trouve pas la fonction :confused: Je précise que je suis sous linux.

Merci.

Essaye http://www.linux-kheops.com/doc/man/manfr/…3/strtod.3.html

Qui est ANSI.