Scanf() sauté [Résolu]

Messages postés
19
Date d'inscription
vendredi 22 mars 2019
Statut
Membre
Dernière intervention
27 juillet 2019
- - Dernière réponse :  c_est_pas_faux - 10 août 2019 à 10:03
Bonjour, ceci est sensé être un petit test pour résoudre un problème un peu plus compliqué mais voila je bloque dessus , je voulais associer au tableau nombre qui contient des chiffres romains des valeurs en nombres arabes, pour ce faire le chiffre romain doit être lu a partir du clavier, après avoir fait des tests j'ai pu remarquer que le programme saute quelques scanf et ne lit que 4 chiffres sur 8
merci d'avance

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

int main()
 {   char rm[7]={'I','V','X','L','C','D','M'};
    int ar[7]={1,5,10,50,100,500,1000};
    char nombre[8];
    int tab[8];
    int i,cpt,j,z,trouve;

    for(i=0;i<8;i++)
    {
        scanf("%c",&nombre[i]);

        cpt=0;
        trouve=1;
        while((cpt<7)&&(trouve==1))
        {
            if((nombre[i])!=(rm[cpt]))
                cpt=cpt+1;
            else{
                trouve=0;
                tab[i]=ar[cpt];
        }

        }

    }
   for(j=0;j<8;j++)

   printf("\n nombre %d \n",tab[j]);
    return 0;
}


Configuration: Windows / Chrome 75.0.3770.100
Afficher la suite 

2 réponses

Messages postés
8711
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2019
436
0
Merci
bonjour, je vois que tu ne testes pas ce que retourne scanf, et je ne vois pas que tu affiches le contenu de nombre[].
pourquoi utilises-tu scanf au lieu de getchar?
Voila ce que j’ai trouvé en cherchant

https://openclassrooms.com/forum/sujet/boucle-saute-la-scanf-une-fois-sur-deux
Merci quand même
yg_be
Messages postés
8711
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2019
436 > Marie12_2000 -
tu n'as pas écrit que tu rentrais un caractère par ligne, et pas 8 caractères sur la même ligne.
Commenter la réponse de yg_be
0
Merci
Un programme de conversion en chiffres romain qui marche :


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

int r_to_a(char roman[], int arabe[], char c)
{
for (int i = 0; i < 7; i++)
{
if (c == roman[i])
{
return arabe[i];
}
}

return -1;
}

int convert(char tab[], char roman[], int arabe[], int size)
{
int result = 0;
for (int i = 0; i < size; i++)
{
if (i > 0 && r_to_a(roman, arabe, tab[i]) < r_to_a(roman, arabe, tab[i + 1]))
{
result += r_to_a(roman, arabe, tab[i + 1]) - r_to_a(roman, arabe, tab[i]);
i++;
printf("RESULT : %d\n", result);
}
else if (i > 0 && r_to_a(roman, arabe, tab[i]) >= r_to_a(roman, arabe, tab[i - 1]))
{
result += r_to_a(roman, arabe, tab[i]);
printf("RESULT : %d\n", result);
}
else
{
result += r_to_a(roman, arabe, tab[i]);
printf("RESULT : %d\n", result);
}
}
return result;
}

int main()
{
char roman[7] = {'I','V','X','L','C','D','M'};
int arabe[7] = { 1, 5, 10, 50, 100, 500, 1000};

char test[] = "MCMLXXXV";
int result = convert(test, roman, arabe, 8);
printf("RESULT RECEIVED : %d\n", result);
printf("RESULT EXPECTED : 1985");
return 0;
}
Commenter la réponse de c_est_pas_faux