Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/01/2007, à 20:26

adama

programme c

Bonjour j'ai ecrit un petit programme qui me permet de convertir une chaine
de caractere en minuscule mais quand je compile il me met :

souly.c:15: attention : passing argument 1 of ‘tolower’ makes integer from pointer without a cast


Mon programme la voila :

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


int main (void)
{
  char c[7]= "BONJOUR";
  int i=0;
 

  for(i==0; i++; i<7)
   {
     int tolower(int c);
     printf("%s\n", tolower( c));
   
   }
 
return  0;
  }

Hors ligne

#2 Le 19/01/2007, à 21:30

jobherzt

Re : programme c

1) je ne suis pas sur que tu sois dans la bonne section du forum
2) utilise la balise 'code' pour afficher ton programme..
3) pris comme ca, ton programme ne veut pas dire grand chose... la ligne

int tolower(int c);

n'a pas de sens.. en plus, je ne suis pas sur que la fonction tolower, si elle existe, s'utilise comme ca. as tu vérifié ?? quel est exactement le but de ce programe ?

Hors ligne

#3 Le 19/01/2007, à 21:38

adama

Re : programme c

Tu peux donc m'indiquer consernant la bonne section du forum.
Le but de ce programme est de convertir une chaine de caractere
en nombre.

merci quand meme de votre aide

Hors ligne

#4 Le 19/01/2007, à 22:01

jobherzt

Re : programme c

a priori, je dirais que la bonne secton est... developpement et programmation wink

concernant ton programme : ton but est vague, en effet, en C (et en fait dans tout langage de programmation, mais c'est moins explicite), les caracteres sont deja des nombres... et ton programme avait plutot l'air de vouloir afficher "bonjour" en minuscule...

remarques aussi que tu fais une boucle for, visiblement pour parcourir les elements de c, mais dans cette boucle tu utilises directement la variable c... en plus, le for(i==0 est faux, a priori.... serais tu capable de m'expliquer chaque ligne de ton programme et ce qu'elle est censé faire ? je ne vois toujours pas quel est le but de la ligne dont je te parle dans mon premier post..

Hors ligne

#5 Le 19/01/2007, à 22:28

adama

Re : programme c

En faita la fonction tolower convertit seulement une chaine un caractere en nombre
il ne peut pas faire le meme chose avec les chaine de caracteres. C 'est pour cela j'ai utiliser un boucle for pour parcourrir mon tableau de chaine et convertir les caracteres qui s'y trouve
Concernant le code je l'ai pris sur : http//:c.developpez.com

merci pour l'aide

Hors ligne

#6 Le 19/01/2007, à 22:30

adama

Re : programme c

En fait la fonction tolower convertit seulement  un caractere en nombre
il ne peut pas faire la meme chose avec les chaine de caracteres. C 'est pour cela j'ai utiliser un boucle for pour parcourrir mon tableau de chaine et convertir les caracteres qui s'y trouvent
Concernant le code je l'ai pris sur : http//:c.developpez.com

merci pour l'aide

Hors ligne

#7 Le 19/01/2007, à 22:35

jobherzt

Re : programme c

non, comme son nom l'indique, tolower convertit un caractere en minuscule. la ligne dont je t'ai parlé au debut ne sert toujours a rien, j'ai l'impression que tu cherches a definir toi meme la fonction tolower...

ensuite, faire une boucle pour parcourir caractere par caractere c'est bien, mais dans ce cas il faut bien que tu lui dise a un moment que tu vex la ieme lettre !! or toi tu utilises c directement. un code correct pourrait etre :

//affiche "bonjour" en minuscule

for(i=0;i<7;i++) //avec un simple = pas ==
{
   printf("%s\n", tolower(c[i])); // c[i] et non pas c
}

Hors ligne

#8 Le 19/01/2007, à 22:44

adama

Re : programme c

merci beaucoup ca compile bien mais a l'execution il me met :

erreur de segmentation

je ne sait pas pourqoir

Hors ligne

#9 Le 19/01/2007, à 22:55

jobherzt

Re : programme c

ca compile, mais est ce que c'est ce que tu voulais obtenir ?

une erreur de segmentation se produit i tu essaie de depasser la capacité d tableau. as tu verifié ?? je ne sais pas comment fonctionne la fonction tolower.. je t'ai donné ce code comme une base, mais il n'est pas censé fonctionner :-)

Hors ligne

#10 Le 19/01/2007, à 23:14

adama

Re : programme c

Je voulai aussi que ca compile bien.

J' ai verifie la taille du tableau mais je ne trouve pas l'erreur
et ce que je ne comprend pas c'est que le fonction tolower
marche a merveille avec une convertion d'un caratere majuscule au caractere
minuscule

Hors ligne

#11 Le 19/01/2007, à 23:40

seb0uil

Re : programme c

Sur une page de developpez.com, j'ai trouvé ca.. si ca peut aider..

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

char *str_tolower (const char *ct)
{
  char *s = NULL;

    if (ct)
      {
      int i;
      s = malloc (sizeof (*s) * (strlen (ct) + 1));
      if (s)
      {
      for (i = 0; ct[i]; i++)
          {
          s[i] = tolower (ct[i]);
          }
      s[i] = '\0';
      }
    }
   return s;
}

// ma petite contribution ;)
void main(void)
{  printf("%s\n",str_tolower("TEST"));}

Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

Hors ligne

#12 Le 19/01/2007, à 23:42

jobherzt

Re : programme c

adam> essaie deja de reperer a quel endroit ca bloque. est ce qu'il affihe qqchose avant de planter ? si oui repere a quel moment il s'arrete. sinon, le probleme se situe sans doute dans le printf. que valent tes indices ? qu'y a t il dans ton tableau ?? affiche le maximum d'information et essaie de "remonter" l'erreur.. on appelle ca du debuggage, et c'est pas la derniere fois que tu en feras :-)

Hors ligne

#13 Le 20/01/2007, à 04:20

mr_pouit

Re : programme c

jobherzt a écrit :

a priori, je dirais que la bonne secton est... developpement et programmation wink

Hop, déplacé wink

Hors ligne

#14 Le 20/01/2007, à 04:39

coffee

Re : programme c

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


int main (void)
{
	char c[8],b[8];
	int i=0;
 
	if(!strcpy(c,"BONJOUR"))
	{
		printf("Erreur de copie");
	}
	b[7]='\0';

	for(i=0; i<strlen(c); i++)
 	{
		b[i]=tolower(c[i]);
		if (b[i] == c[i])
		{
			printf("tolower n'a pas fonctionné sur la lettre numéro %d: %c\n", i, c[i]);
		}
	}
	printf("%s\n", b);
 	return 0;
}

Chémoiçamarche


Nom d'un tupperware habillé en streetware mangeant de la confiture de pouère et qui se dite où est-ce que je suis ouère !
Tiens mon blog
Les blagues sous forme de fausses aides sont susceptible de ban (ex: rm)

Hors ligne

#15 Le 20/01/2007, à 16:18

adama

Re : programme c

Merci a tous j'ai reussi enfin a faire fonctionner le programme

le bon programme le voila :

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


 int main (void)
{
  char c[8]= "BONJOUR";
  char b[8];
  int i=0;
  b[7]='\0';

  for(i == 0;i<7;i++)
   {
     b[i]=tolower(c[i]);
     if (b[i] == c[i])
       {
	 printf("tolower n'a pas fonctinne sur la lette numero  %d: %c\n", i, c[i]);
       }
   }
     printf("%s\n", b);
     return 0;
}

Hors ligne

#16 Le 21/01/2007, à 10:01

Pierre Maurette

Re : programme c

Bonjour,

Une petite erreur, sans conséquence puisque vous aviez initialisé le i à 0 (de façon redondante par rapport à ce que vous pensiez écrire). Il fallait écrire:

for(i = 0; i < 7; i++)

ou 

for(; i < 7; i++)

Sinon, il est clair qu'il ne s'agit que d'un exercice. Mais il vaut mieux prendre l'habitude de coder en dur le moins de choses possible. Par exemple, "BONJOUR" est constante chaine, le compilateur en connait la longueur, autant le laisser bosser. Voici une proposition qui vous permet de changer la chaine avec une seule modification:

#define DATA_STR "BONJOUR"

int main(void)
{
  char c[] = DATA_STR;
  char b[] = DATA_STR;
  size_t i = 0;
  
  do
    {
      b[i] = tolower(c[i]);
    }
  while(c[i++] != '\0');
  
  printf("%s\n", b);
  return 0;
}

tolower() renvoie '\0' pour '\0'. On utilise ce fait et ainsi la boucle fonctionne également si b[] a été initialisé différemment. Dans le code tel qu'il est,

while(c[++i] != '\0');

fonctionne également et gagne une itération.

Bonne journée,

Pierre

Hors ligne

#17 Le 22/01/2007, à 21:29

coffee

Re : programme c

bien vu le ==, j'avais pas les yeux en face des trous moua


Nom d'un tupperware habillé en streetware mangeant de la confiture de pouère et qui se dite où est-ce que je suis ouère !
Tiens mon blog
Les blagues sous forme de fausses aides sont susceptible de ban (ex: rm)

Hors ligne