Scanf() sauté [Résolu/Fermé]

Signaler
Messages postés
27
Date d'inscription
vendredi 22 mars 2019
Statut
Membre
Dernière intervention
29 février 2020
-
 c_est_pas_faux -
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

2 réponses

Messages postés
12613
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2020
701
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
Messages postés
12613
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2020
701 > 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.
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;
}