Problème de lecture avec Scanner

gacki Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai un problème dans cette classe ... à chaque fois que je l'exécuté elle me donne premièrement la possibilité d'entre le nom mais dans la deuxième itération elle me demande d'entrer seulement les cases "num" je ne sais pas ou est le problème ... bon en C j'avais la possibilité la fonction fflush(stdin) et le tour est joué mais ici ... !!! ???
la classe est : (sachant que les classes Etudiant et Enseignant je l'ai déjà crée et elle comporte seulement un constructeur qui fait l'initialisation et une méthode affiche() )

import java.util.*;

public class TestPersonne{
public static void main(String[] arg)
{
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(arg[0]);
Personne[] tab = new Personne[n];
String str;
int num;
for(int i=0;i<n;i++)
{
if(i%2 == 0)
{
System.out.println("entrez les infos de l'etudiant (nom,cne) : ");
str = sc.nextLine();
num = sc.nextInt();
tab[i] = new Etudiant(str,num);
}
else
{
System.out.println("entrez les infos du prof (nom,some) : ");
str = sc.nextLine();
num = sc.nextInt();
tab[i] = new Enseignant(str,num);
}
}
for(int i=0;i<n;i++)
{
tab[i].affiche();
}
}
}
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu as pointé du doigt le problème avec le flush du c++ on est ici sur un cas similaire.

nextInt permet de lire un entier mais il ne gère pas le saut de ligne donc le \n reste à lire. Du coup le nextLine lit le \n resté mais ça décale tout car la ligne que tu voudrais lire n'a toujours pas été lue...

Ce qu'il faut c'est faire un nextLine après le nextInt pour terminer la lecture de la ligne.
0