Problème de lecture avec Scanner

Fermé
gacki Messages postés 109 Date d'inscription mardi 23 avril 2013 Statut Membre Dernière intervention 15 mars 2016 - Modifié par gacki le 5/11/2013 à 14:38
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 5 nov. 2013 à 18:16
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
5 nov. 2013 à 18:16
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