menu praksewn

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
NTINAaa
Δημοσιεύσεις: 21
Εγγραφή: 16 Μαρ 2009 00:25

menu praksewn

Δημοσίευση από NTINAaa » 24 Απρ 2009 03:48

paidia exw mia aksisi po leei na dinei o xristis 2 arithmous kai ena simbolo praksis kai na ekteleitai i analogi praksi.............to tprogramma na termatizetai otan o xrhstis anti gia simbolo praksis dwsei to ! !!!lkati ekana alla kapou mou kollaei an mporeite na boithisete........

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
main &#40; &#41;
&#123;
     int a,b,;
     char sim ;
     do 
     &#123;
     puts&#40;"give for a symbol & two numbers\n"&#41;;
     scanf&#40;"%c %d %d",&sim,&a,&b&#41;;
     printf&#40;"%d %c %d =",a,sim,b&#41;;
     switch &#40;sim&#41;
     &#123;
     case  '+'&#58;
          printf&#40;" %d",a+b&#41;;
          break;
     case  '-'&#58;
           printf&#40;" %d",a-b&#41;;
          break;
     case 'x'&#58;     
     case '*'&#58; 
          printf&#40;" %d",a*b&#41;;
         break;
     case '&#58;'&#58;        
     case '/'&#58; b!=0 ? printf&#40;" %d \n",a/b&#41;  &#58; printf&#40;"this action is not correct\n"&#41;;
          break;
          default &#58;
                  printf&#40;"the symbol is wrong"&#41;;
          &#125;
     &#125; while &#40;sim!='!'&#41;;
     system &#40;"pause"&#41;;
     return 0;
&#125;    

Άβαταρ μέλους
bxenos
Δημοσιεύσεις: 53
Εγγραφή: 18 Αύγ 2008 19:56

menu praksewn

Δημοσίευση από bxenos » 24 Απρ 2009 04:01

Τι σημαίνει κολάει;

error: Έχεις ένα συντακτικό λάθος (int a,b,; )
warning: Η σωστή σύνταξη της main() {} είναι int main(void){...}
warning: γράφε ελληνικά
hint:σπάσε την scanf σε 2 κομάτια, ωστε να διαβάζεις το σύμβολο πρώτα (ωστε να τερματίζεις μόλις έρθει το ! χωρις να χρειαστει να δωσεις νούμερα).
Ασε που καλύτερα να κάνεις την ανάγνωση του συμβόλου με getchar() για να εξαλείψεις τα ENTER που έχουν ξεμείνει απο την προηγούμενη πράξη

NTINAaa
Δημοσιεύσεις: 21
Εγγραφή: 16 Μαρ 2009 00:25

menu praksewn

Δημοσίευση από NTINAaa » 24 Απρ 2009 04:44

την εντολή getchar ( ) δεν μπορώ να την χρησιμοποιήσω γιατι δεν τιν εχουμε διδαχτει!!!
στην πρωτη επαναληψη δεν ιπαρχει κανενα προβλημα στην δευτερη ομως αφου δωσω το συμβολο δεν μου ζηταει αριθμους αλλα εμφανιζει τους προηγουμενους και πηγαινει κατευθειαν στην default case!!!!!!!!!!!!!!!υπαρχει τροπος να το διορθωσω??????

Άβαταρ μέλους
bxenos
Δημοσιεύσεις: 53
Εγγραφή: 18 Αύγ 2008 19:56

menu praksewn

Δημοσίευση από bxenos » 24 Απρ 2009 11:34

αντικατέστησε το:

Κώδικας: Επιλογή όλων

     puts&#40;"give for a symbol & two numbers\n"&#41;; 
     scanf&#40;"%c %d %d",&sim,&a,&b&#41;; 
     printf&#40;"%d %c %d =",a,sim,b&#41;;
με

Κώδικας: Επιλογή όλων

     puts&#40;"give for a symbol & two numbers\n"&#41;;  
     scanf&#40;"%c",&sim&#41;;
     if&#40;sim=='!'&#41;
          break;
     scanf&#40;"%d %d",&a,&b&#41;; 
     while&#40;getchar&#40;&#41; != '\n'&#41;
          ;
     printf&#40;"%d %c %d =",a,sim,b&#41;; 
το αν διδαχθήκατε την getchar() ή όχι δεν έχει σημασία. Δεν απαγορεύεται να μαθαίνεις μόνη σου.

Το sim το διαβάζω μόνο του για να μπορώ να δώσω μονο ! όταν θέλω να τελειώσω τις πράξεις, αλλιώς θα χρειαζόταν να δώσω και νούμερα.

Η scanf() διαβάζει ότι πληκτρολόγησες (sim και νουμερα), αλλα οχι το ENTER που πάτησες (και είναι και αυτο ενας χαρακτηρας). Αν δεν το διαβάσεις με την getchar() και το while που έβαλα, δεν θα λειτουργήσει σωστα η επόμενη φορα που θα κληθει η scanf, διότι για sim θα διαβάσει το ENTER.

Μπορείς να αντικαταστήσεις την χαζοεντολή system("pause") με

Κώδικας: Επιλογή όλων

    printf&#40;"press any key to terminate calculator\n"&#41;;
    getchar&#40;&#41;;

Erevis
Δημοσιεύσεις: 56
Εγγραφή: 12 Ιουν 2008 16:31
Τοποθεσία: Χαλάνδρι

menu praksewn

Δημοσίευση από Erevis » 24 Απρ 2009 23:19

Συμβουλή, όταν χρησιμοποιείς την scanf μπορείς να χρησιμοποιήσεις το \n για ν'αλλάξεις γραμμή στο buffer εισόδου και να μη διαβάζονται απομεινάρια από προηγούμενες εισόδους

πχ. scanf("\n%d",&integer);

Εγώ από πάντα το χρησιμοποιούσα και δεν είχα ποτέ προβλήματα με τη συνάρτηση (εκτός απο το γνωστό πρόβλημα με τα whitespaces)

Κάτι άλλο που θα μπορούσες να κάνεις, μιας και η scanf έχει διάφορα bugs, είναι να διαβάζεις με την fgets από το stdin αλλά απ'οτι βλέπω δεν έχετε μάθει την getchar, οπότε χλωμό το κόβω να έχετε μάθει την fgets...

Y.Γ Αν έχεις καθηγητή τον Χρυσικόπουλο μη το κάνεις! :P

NTINAaa
Δημοσιεύσεις: 21
Εγγραφή: 16 Μαρ 2009 00:25

menu praksewn

Δημοσίευση από NTINAaa » 25 Απρ 2009 01:11

Παιδία ευχαριστώ την βρήκα την άκρη.....πιστεύω!!!!!και πάλι ευχαριστώ!!!!!ναι τον χρισικόπουλο εχω....thanks για την συμβουλή !!!!!!! :wink:

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης