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 -
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();
}
}
}
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
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- Accusé de lecture gmail - Guide
- Lecture epub sur pc - Guide
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.