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

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

Δημοσ.

Αν μετα τις if δεν υπαρχουν ερωτηματικα κρασαρει με το που δωσω π.χ 5/0

 

Εννοείται πως δεν θα βάλεις τα ερωτηματικά γιατί έτσι δεν έχουν νόημα τα if σου. Διόρθωσες τα = σε == όπως είπαμε ?

  • Απαντ. 51
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

while (numb2=0)

 

 

 

Η συνθηκη σου ειναι λαθος....while (numb2==0)

Θελουμε τον τελεστη ισοτητας οχι της εκχωρησης τιμης!

Δημοσ.

while (numb2=0)

Η συνθηκη σου ειναι λαθος....while (numb2==0)

Θελουμε τον τελεστη ισοτητας οχι της εκχωρησης τιμης!

Ωχ ναι.. Το διορθωσα και εγινε.. Να σαι καλα φιλε.. Πραγματικα χιλια ευχαριστω..

 

Εγώ στις 23:31 και ο antbyron στις 23:24 τι διαφορετικό είπαμε ?

Δημοσ.

Εγώ στις 23:31 και ο antbyron στις 23:24 τι διαφορετικό είπαμε ?

Σε σενα το ειπα..:P μετα το refresh βγηκε η απαντηση του alexc.. Οπως και να εχει σας ευχαριστω...

Δημοσ.

Εχω κανει ενα λαθος ... στην getchar() ο ch που επιστρέφεται πρεπει να δηλωθει σαν int και οχι σαν char.

 

@jimisvog καντο με switch καλυτερα ειναι λιγοτερο περιπλοκο και πιο ευαναγνωστο :P

Kαμια φορα κάνουμε αγωνα και ψάχνουμε τροπος να ελαφρύνουμε τον κώδικα απο περιττες if !

Αλλα και while και for κτλπ....

Δημοσ.

 

Σε σενα το ειπα..:P μετα το refresh βγηκε η απαντηση του alexc.. Οπως και να εχει σας ευχαριστω...

Ωραία. Χαίρομαι που λύθηκε.

 

Όσον αφορά τη διαίρεση, κάτι που μου χτύπησε άσχημα στο μάτι είναι το if+do/while. Έχεις if (numb2 == 0) και μέσα σε αυτό τρέχεις do {} while (numb2==0). Γιατί δεν το κάνεις while (numb2 == 0) { } ώστε να μην χρειάζεται το if ?

Δημοσ.

Όσον αφορά τη διαίρεση, κάτι που μου χτύπησε άσχημα στο μάτι είναι το if+do/while. Έχεις if (numb2 == 0) και μέσα σε αυτό τρέχεις do {} while (numb2==0). Γιατί δεν το κάνεις while (numb2 == 0) { } ώστε να μην χρειάζεται το if ?

Δικιο εχεις.. Απλα μεσα στην συγχηση τα εβαλα ολα.. :P Το εβγαλα και το if..

Δημοσ.

Το πρόβλημα κατά το οποίο αγνοούσε το if μετά την scanf() ήταν το (infamous) Line Buffering

 

Εκτός από τους τρόπους που προτάθηκαν ήδη στο νήμα, λύνεται και με fgets()/sscanf(). Ο κώδικας που ακολουθεί χρησιμοποιεί αυτό τον συνδυασμό, αλλά κατά τα άλλα λύνει την άσκηση με array of function pointers, μέσα σε ένα "rather cryptic" do-while loop (δηλαδή δεν απευθύνεται σε παιδιά που κάνουν τα πρώτα τους βήματα... τον προσθέτω να υπάρχει στο νήμα ως εναλλακτικός, προχωρημένος, αλλά αρκετά συνηθισμένος τρόπος λύσης τέτοιου είδους προβλημάτων).

 

 

 

>
#include <stdio.h>    // printf(), puts(), fgets(), sscanf()
#include <stdlib.h>    // exit()
#include <limits.h>    // INT_MIN
#include <string.h>    // strchr()

#define MAXINPUT    (255+1)
#define OPERATORS    "+-*/%"

/* -------------------------------------------------- */
int add(int x, int y){ return x + y; }
int sub(int x, int y){ return x - y; }
int mul(int x, int y){ return x * y; }
int dvs(int x, int y){ return 0 == y ? INT_MIN : x/y; }
int mod(int x, int y){ return 0 == y ? INT_MIN : x%y; }
/* -------------------------------------------------- */
int char_to_oper( int ch )            // converts operator symbol to array index
{
   char *cp = strchr(OPERATORS, ch);
   return (NULL == cp) ? -1 : (int)(cp - OPERATORS);
}
/* -------------------------------------------------- */
int main( void )
{
   int (*operation[])(int x, int y) = {    // array of function pointers
       &add, &sub, &mul, &dvs, &mod
   };
   char chOper, input[MAXINPUT] = {'\0'};
   int  op1, op2, iOper, result;

   printf( "SUPPORTED OPERATORS: %s\n\n", OPERATORS );
   do {
       puts( "Enter operands & operator separated by space (e.g: 2 + 3)" );
       fgets(input, MAXINPUT, stdin);
   } while(
       3 != sscanf(input, "%d %c %d", &op1, &chOper, &op2)    // validate # of input tokens
       || -1 == (iOper=char_to_oper(chOper))            // validate operator symbol
       || INT_MIN == (result = (*operation[iOper])(op1, op2))    // validate result (eg: div by non-0)
   );

   printf( "%d\n", result );

   exit(0);
}

 

 

Δημοσ.

Καταρχάς απ' ότι κατάλαβα είστε από ΤΕΙ Αθήνας. Επειδή κι εγώ εκεί σπουδάζω πετάξτε όσο είναι καιρός το DEV C++ και βάλτε κάποιο άλλο IDE (eclipse cdt, netbeans, visual studio)

  • Like 3
Δημοσ.

Καταρχάς απ' ότι κατάλαβα είστε από ΤΕΙ Αθήνας. Επειδή κι εγώ εκεί σπουδάζω πετάξτε όσο είναι καιρός το DEV C++ και βάλτε κάποιο άλλο IDE (eclipse cdt, netbeans, visual studio)

Πες κάποιο επιχείρημα που να στηρίζει την προτροπή σου να πετάξει κάποιος το DEV CPP.

Δημοσ.

Πες κάποιο επιχείρημα που να στηρίζει την προτροπή σου να πετάξει κάποιος το DEV CPP.

 

Είναι εγκαταλελειμμένο εδώ και πάρα πολλά χρόνια, περιέχει πανάρχαιο compiler και είναι γεμάτο bugs.

 

Για να μην αλλάζεις περιβάλλον και ταυτόχρονα να επωφεληθείς από όλες τις εξελίξεις της γλώσσας (τόσο της C όσο και της C++) μπορείς να κατεβάσεις το σύγχρονο fork του, το Orwell Dev-C++ που σου έγραψα στο προηγούμενο ποστ.

 

Έχει download που περιλαμβάνει (και σετάρει αυτόματα) σύγχρονες εκδόσεις του mingw toolchain (compiler, κλπ). Έχει διορθώσει πολλά από τα bugs του παλιού, και το κυριότερο είναι πως συνεχίζει να εξελίσσεται.

 

Λεπτομέρειες και κατέβασμα, εδώ: http://orwelldevcpp.blogspot.gr/

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

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