Entrée / sortie simple

MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 - 2 déc. 2003 à 17:49
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 3 déc. 2003 à 00:00
Je vouidrais simplment renvoyer le plus grand nombre de la chaine saisie par l'utilisateur (chaque nombres sont séparé par des espaces)
Mais j'ai un probleme de bug que je ne comprend pas trop qq'un pourrez til maider?

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

int countOccur(char* s,int nombre)
{

char temp[10];
int y;
int nombree;
int old;
y=0;
old = 0;

for (int i=0;i<=nombre;i++)
{
if (s[i] != ' ')
{
temp[y]=s[i];
y++;
}else
{
y=0;
nombree = atoi(temp);

if (nombree > old)
old = nombree;

}

}

return old;
}

int main()
{

int nombre;
char *s;

scanf("%d",nombre );

scanf("%s\n", s);
s = (char*)malloc(sizeof(char)*(nombre));
printf("%d\n", countOccur(s,nombre));
return 0;
}

Merci :)

10 réponses

hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
2 déc. 2003 à 18:12
je dirais deja sans aller plus loin qu'il faut faire le malloc avant le scanf
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
2 déc. 2003 à 18:23
Salut,
Aussi, il faut passer &nombre en param a scanf().
0
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
2 déc. 2003 à 20:50
Pour malloc c une erreur de recopiage ^^
merci pour nombre ca merdait aussi ^^
Mais en fait je me suis rendu compte que scanf lisais tout jusqu'a espace par ex :

char s[10];
scanf("%s\n", s);

et bien si je tape 1 2 3 ca ne prends que 1...
Comment faire pour qu'il prenne tout??
Merci !!
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
2 déc. 2003 à 20:53
Salut,
Moi j'utiliserais gets(s);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
2 déc. 2003 à 21:29
Merci mais la c'est le delire total avec :

int nombre;
char *s;
gets(s);
printf("%s", s);
scanf("%d",&nombre );
printf affiche le resultat correct mais avec
scanf("%d",&nombre );
gets(s);
printf("%s", s);
ca marche presque pas..
Je soupconne le buffer mais.. comment faire justement?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
2 déc. 2003 à 21:31
Salut,
Et le buffer qui pointe sur s, tu l'alloue quand ?
0
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
2 déc. 2003 à 22:44
J'ai aussi essayé :
s = (char*)malloc(sizeof(char)*(nombre+1));
mais sans succes :(
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
2 déc. 2003 à 22:55
Salut,
Bon deja dans mon post d'avant, je voulais dire que s ne pointais sur rien. Enfin on s'est compris.
Sinon, je me suis souvenu que utiliser gets & scanf posait des problemes.
Comme je ne sais pas comment faire pour que scanf lise les caracteres jusqu'a ce qu'on apuie sur entrer, je te propose une methode avec que des gets:

int nb = 0;
char * s;
char szNB[16];
nb = atoi(gets(szNB));
s = (char*) malloc(nb);
gets(s);
// etc....

Ensuite pour la fonction countOccur, pourquoi copie tu le nombre dans un buffer avant de le tester avec atoi ?
Moi j'aurais fait un truc du genre:

int countOccur(char* s,int nombre)
{
int nb = 0;
for (int i=0; i<nombre; i++)
{
int temp = atoi(s+i);
if(temp > nb)
nb = temp;
while(*(s+i) != 32 && *(s+i)) i++;
}
return nb;
}
0
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
2 déc. 2003 à 22:56
Ok merci beaucoup je v terster tout ca des demain !!
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 déc. 2003 à 00:00
Pour que scanf s'arrête sur enter y'a peut être une piste sur des codes proposé récement :

http://www.cppfrance.com/code.aspx?ID=18345

il y présente une méthode de scan que je ne connaissais pas (arrêt dès quon tombe sur un caractère particulier)
0
Rejoignez-nous