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

Διάβασμα χαρακτήρα στην C#


clevercitizen

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

Δημοσ.

Καλησπέρα. Μια βοήθεια στη C#

Το παρακατω πρόγραμμα είναι ένας χαζός υπολογιστής που κανει τις 4 πράξεις(+-*/)

Το πρόβλημά μου είναι ότι όταν βάζω να διαβάσει τον χαρακτήρα (+-*/) αφότου έχει διαβάσει την 1η τιμή, στον dev-c++ 4.9 δεν υπολογίζει καθόλου την scanf ("%c", &a); και περιμένει να του δώσω την 2η τιμή (στο visual studio 6 βγάζει σφάλμα όταν τρέχει το exe), ενώ αν βάλω να διαβάσει τον χαρακτήρα προτού διαβάσει την 1η τιμή, δουλεύει κανονικα και με τους 2 compilers. Καμιά βοήθεια?

/*Leitourgei*/

#include <stdio.h>

 

int main ()

{

char a;

float b,d,c;

 

printf ("dose tin praksi (+ - * /)\n");

scanf ("%c", &a);

printf ("dose ton 1o arithmo\n");

scanf ("%f",&B);

printf ("dose ton 2o arithmo\n");

scanf ("%f", &c);

if (a=='+')

{d= b + c;

printf ("to athroisma einai %f\n", d);}

else if (a=='-')

{d= b - c;

printf ("i diafora einai %f\n", d);}

else if (a=='*')

{d= b * c;

printf ("to ginomeno einai %f\n", d);}

else

{

while (c== 0)

{printf ("edoses 0 gia diaireti, parakalw ksanadwse ton diaireti-diaforo tou 0 ;-)\n");

scanf ("%f", &c);}

d= b / c;

printf ("to piliko einai %f\n", d);}

}

 

 

 

 

//De leitourgei

 

#include <stdio.h>

 

int main ()

{

char a;

float b,d,c;

 

printf ("dose ton 1o arithmo\n");

scanf ("%f",&B);

printf ("dose tin praksi (+ - * /)\n");

scanf ("%c", &a);

printf ("dose ton 2o arithmo\n");

scanf ("%f", &c);

if (a=='+')

{d= b + c;

printf ("to athroisma einai %f\n", d);}

else if (a=='-')

{d= b - c;

printf ("i diafora einai %f\n", d);}

else if (a=='*')

{d= b * c;

printf ("to ginomeno einai %f\n", d);}

else

{

while (c== 0)

{printf ("edoses 0 gia diaireti, parakalw ksanadwse ton diaireti-diaforo tou 0 ;-)\n");

scanf ("%f", &c);}

d= b / c;

printf ("to piliko einai %f\n", d);}

}

 

 

 

Προσπάθησα να χρησιμοποιήσω την getchar() αντί τις scanf ("%c", &a); αλλά βρίσκω περισσότερα προβλήματα (Πριν 2 βδομάδες άρχισα να πειραματίζομαι με c, είχα ασχοληθεί παλιότερα με c++)

Eυχαριστώ

Δημοσ.

γιατι δεν το κανεις με ενα μενου, δηλαδη 1. Προσθεση 2. Αφαιρεση κτλπ ... και με ενα if κανεις ελεγχο.πχ if(choice==1) bla else if(choice==2) bla ktlp ...

Δημοσ.

Αυτό που γίνεται είναι πως διαβάζει το ENTER σαν χαρακτήρα:lol:

Οπότε αν κάνεις scanf("%c%c",&a); θα δουλέψει!(σε εμένα δουλεύει σε DEV 4.9.9.2)

Υποψιάζομαι ότι δεν είναι η καλύτερη λύση καθώς μπακαλίστικη.Αλλά την c δεν την κατέχω καθόλου οπότε δεν μπορώ να πω ότι ξέρω κάποια καλύτερη;)

Δημοσ.
γιατι δεν το κανεις με ενα μενου, δηλαδη 1. Προσθεση 2. Αφαιρεση κτλπ ... και με ενα if κανεις ελεγχο.πχ if(choice==1) bla else if(choice==2) bla ktlp ...

 

Το είχα κάνει έτσι παλιότερα, απλά ήθελα να χρησιμοποιήσω τα σύμβολα. Ευχαριστώ.

 

Αυτό που γίνεται είναι πως διαβάζει το ENTER σαν χαρακτήρα:lol:

Οπότε αν κάνεις scanf("%c%c",&a); θα δουλέψει!(σε εμένα δουλεύει σε DEV 4.9.9.2)

Υποψιάζομαι ότι δεν είναι η καλύτερη λύση καθώς μπακαλίστικη.Αλλά την c δεν την κατέχω καθόλου οπότε δεν μπορώ να πω ότι ξέρω κάποια καλύτερη;)

 

Ευχαριστώ φίλε τώρα δουλεύει και σε μένα ;)

Δημοσ.

Αυτό που προτείνει ο alex2005 δουλεύει, αλλά μπορεί να έχει πρόβλημα στην περίπτωση μιας "απρόσεχτης" εισαγωγής. Αν για παράδειγμα μετά την εισαγωγή του πρώτου αριθμού πατήσεις ένα κενό και μετά enter, τότε ενώ ο αριθμός θα διαβαστεί σωστά, θα υπάρχουν δύο χαρακτήρες στην είσοδο (το κενό και το \n) και το διάβασμα του χαρακτήρα δεν θα δουλέψει. Μια πιο αξιόπιστη λύση είναι πριν την scanf να καλείς την fflush(stdin) για να καθαρίζει την είσοδο που είναι και γενικά καλή πρακτική.

 

Υ.Γ. Δεν αλλάζεις και το c# με c++ στον τίτλο για να μην μπερδευτεί κανείς

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

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

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