Προς το περιεχόμενο

java: System.in.read()


windguru

Προτεινόμενες αναρτήσεις

Δημοσ.

Αναρωτιόμουν γιατί ένα τέτοιο πρόγραμμα να έχει πρόβλημα, βάζοντάς του λάθος δεδομένα, δηλαδή διάφορα από 1,2,3,4,5...

 

import java.io.*;

 

public class demo

{

public static void main(String args[]) throws IOException

{

 

char ch=(char)System.in.read();

while ((ch!='1')&&(ch!='2')&&(ch!='3')&&(ch!='4')&&(ch!='5'))

{ System.out.print("lathos epilogi");

ch=(char)System.in.read();

}

switch(ch)

{

case '1': System.out.println("-----1------");break;

case '2': System.out.println("-----2----");break;

case '3': System.out.println("-----3---");break;

case '4': System.out.println("-----4---");break;

case '5': System.exit(0);

}

}

}

 

Δηλαδή, εμφανίζει το "λαθος επιλογή" περισσότερες φορές απότι θα έπρεπε

 

Μπορεί να βοηθήσει κανείς????

Δημοσ.

το δοκιμασα το προγραμμα και δεν μπορω να καταλαβω γιατι μπαινει 2 φορες στο loop. για καποιο λογο παιρνει την 2η φορα ενα κενο char.. αν δεν σε υποχρεωνει καποιος να γραψεις το προγραμμα ετσι τοτε καλητερα να χρησημοποιησεις την κλαση Scanner με string η int αντι για char..

  • Moderators
Δημοσ.

>
	while ((ch!='1')&&(ch!='2')&&(ch!='3')&&(ch!='4')&&(ch!='5'))

 

Στην περίπτωση που βάζεις κάποιον χαρακτήρα εκτός των '1', '2' ,'3' ,'4' ,'5' τότε το πρόγραμμά σου μπαίνει στο loop με το "la8os epilogh". Και αυτό που κάνει είναι να συνεχίζει να παιρνει ένα χαρακτήρα από την είσοδο μέχρι να μην υπάρχει άλλος (διαθέσιμος) οπότε θα περιμένει για είσοδο.

Το πρόβλημά σου είναι ότι γενικά όταν εισάγεις ένα χαρακτήρα πχ 'a' και πατάς enter, η είσοδος έχει και κάποιους "κρυφούς" χαρακτήρες. Συνολικά:

'a', '\r', '\n' (Carriage return και αλλαγή γραμμής)

Και σου εμφανίζεται τρεις φορές το "la8os epilogh" (και κατόπιν περιμένει νέα είσοδο).

(Αυτό βέβαια δεν συμβαίνει όταν εισάγεις κάποιον από τους '1', '2' ,'3' ,'4' ,'5' γιατί το πρόγραμμά σου τότε παρακάμπτει άμεσα το loop και κατόπιν τερματιζεται).

 

Μπορείς να κάνεις το εξής λοιπόν:

>
	while ((ch!='1')&&(ch!='2')&&(ch!='3')&&(ch!='4')&&(ch!='5')&&(ch!='\r')&&(ch!='\n'))

Αυτό θα περιορίσει σε μια φορά την εμφάνιση του "la8os epilogh", αλλά το πρόγραμμα μετά (όταν βρει το '\r') θα φύγει από το while loop και θα τερματιστεί.

 

Γενικά, αν θέλεις το πρόγραμμα να τερματιζεται μόνο με '5' στην είσοδο πρέπει να κάνεις και κάποιες άλλες διορθώσεις στη λογική του.

Δημοσ.

Ευχαριστώ πολύ για την βοήθεια και των δυο σας. Αυτο ήταν απλοποιημένη έκδοση του προβλήματος μου. Το προγραμμά μου λειτουργει αρκετά σωστά πλέον!!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...