Atoi
pyn
Messages postés
7
Statut
Membre
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un petit problème avec une partie de mon programme vu que je me suis un peu planté sur le fonctionnement de atoi().
J'ai cru que je pourrais analyser caracteres par caracteres la saisie envoyer à atoi mais visiblement ce dernier prend toute la chaine jusqu'à arriver à un \0 . Résultat rien ne marche comme je le voudrais et je me retrouve bloqué. Si quelqu'un voit une solution je suis tout ouïe.
Merci d'avance.
J'ai un petit problème avec une partie de mon programme vu que je me suis un peu planté sur le fonctionnement de atoi().
J'ai cru que je pourrais analyser caracteres par caracteres la saisie envoyer à atoi mais visiblement ce dernier prend toute la chaine jusqu'à arriver à un \0 . Résultat rien ne marche comme je le voudrais et je me retrouve bloqué. Si quelqu'un voit une solution je suis tout ouïe.
void saisie_pol()//fonction permettant la saisie du polynome
{
Polynome pol_temp = {0,0};
char chaine[TAILLE_MAX]={0};
int i = 0, j, cas ;
printf("Entrez votre polynome\n");
scanf("%s",chaine);
for (j=0; chaine[i]!='\0'; j++)
{
cas = 0;
if (chaine[i]=='-')
{
pol_temp.monome[j].num *= -1;
}
if (chaine[i]=='-' || chaine[i]=='+')
{
i++;
}
for (; chaine[i]!='+' && chaine[i]!='\0' && chaine[i]!='-'; i++)
{
if (chaine[i]=='x')
{
continue;
}
if (chaine[i]=='/')
{
cas=1;
continue;
}
if (chaine[i]=='^')
{
cas=2;
continue;
}
if (cas==0) //pour gérer num, den et degre
{
pol_temp.monome[j].num = atoi(&chaine[i]) + pol_temp.monome[j].num*10;
}
else if (cas==1)
{
pol_temp.monome[j].den = atoi(&chaine[i]) + pol_temp.monome[j].den*10;
}
else if (cas==2)
{
pol_temp.monome[j].degre = atoi(&chaine[i]) + pol_temp.monome[j].degre*10;
}
}
if (pol_temp.monome[j].num == 0 )
pol_temp.monome[j].num = 1;
if (pol_temp.monome[j].den == 0 )
pol_temp.monome[j].den = 1;
}
pol_temp.nbmo=j;
affiche_poly(pol_temp);
save_pol(pol_temp);
}
Merci d'avance.
2 réponses
As-tu pensé à utiliser sscanf ?
Par exemple :
sscanf("5*X^2+10*X+12","%lf*X%*c%lf*X%*c%lf",mon[2],mon[1],mon[0]);
cela récupérera les coefficients.
Après, à toi d'adapter à ton contexte. Il faut d'abord que tu évalues le
Sinon avec ta méthode, j'ai pas tout lu en détail. Mais je vois pas pourquoi tu mets atoi(&chaine[i]) ? Un simple atoi(chaine[i]) devrait marcher non ?
Par exemple :
sscanf("5*X^2+10*X+12","%lf*X%*c%lf*X%*c%lf",mon[2],mon[1],mon[0]);
cela récupérera les coefficients.
Après, à toi d'adapter à ton contexte. Il faut d'abord que tu évalues le
Sinon avec ta méthode, j'ai pas tout lu en détail. Mais je vois pas pourquoi tu mets atoi(&chaine[i]) ? Un simple atoi(chaine[i]) devrait marcher non ?
Pour ton exemple avec sscanf, le problème est que les polynomes rentrés peuvent être plus compliqué.
Ex : 5/7x^4-45/7+4x^4-x^7
Sinon sa aurait été évidemment bien plus simple.
Lorsque je met atoi(chaine[i]) le programme plante. Donc je suis obligé de rajouter un "&" devant la chaine.
En fait je voudrais qu'atoi (ou autre) convertisse une saisie en chiffre mais caractères par caractères.
Or actuellement même en lui envoyant atoi(chaine[i]) il me convertit toute la chaine jusqu'à un caractère qui n'est pas un chiffre.
Ex : 5/7x^4-45/7+4x^4-x^7
Sinon sa aurait été évidemment bien plus simple.
Lorsque je met atoi(chaine[i]) le programme plante. Donc je suis obligé de rajouter un "&" devant la chaine.
En fait je voudrais qu'atoi (ou autre) convertisse une saisie en chiffre mais caractères par caractères.
Or actuellement même en lui envoyant atoi(chaine[i]) il me convertit toute la chaine jusqu'à un caractère qui n'est pas un chiffre.