Problème de lecture avec Scanner
gacki
Messages postés
120
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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();
}
}
}
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:
- Problème de lecture avec Scanner
- Scanner qr code pc - Guide
- Confirmation de lecture whatsapp - Guide
- Accusé de lecture gmail - Guide
- Lecture epub sur pc - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
1 réponse
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.
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.