Scanf() sauté

Résolu
marie12_2000 Messages postés 29 Statut Membre -  
 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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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?
    0
    1. Marie12_2000
       
      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
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > 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.
        0
  2. c_est_pas_faux
     
    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;
    }
    0