Δημοσιεύτηκε: 28 Ιούλ 2011, 14:59
από stamatiou
migf1 έγραψε:Άψογος φίλε Σταματίου ! :) :) :)

Μια μικρή προσθήκη χρειάζεται, στην switch να βάλεις κι ένα deafult στο τέλος για περιπτώσεις που το σύμβολο πράξης είναι κάτι άσχετο από τα 4 που θέλουμε. Δηλαδή...

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

...
...
switch (i3) {
case '*':
printf("%d * %d = %d\n",i1,i2,i1*i2);
break;
...
...
default:
puts("den yparxei tetoia prajh");
break;
}

(το default πρέπει να το βάζουμε πάντα πριν κλείσουμε ένα switch, έστω και με σκέτο break).

Πολύ χάρηκα φίλε Σταματίου, γιατί με είχες φοβήσει την 1η φορά :) Άψογος!

Δίνω και τη δική μου υλοποίηση (χρησιμοποιώ 2 συναρτήσεις εγώ, αλλά δεν έχει σημασία... η ουσία ήταν η χρήση της s_get και η μετατροπή του inbuf στις μεταβλητές που χρειαζόμαστε)
Spoiler: show
Κώδικας: Επιλογή όλων

/* ******************************
* Άσκηση #2
* ******************************/

#include <stdio.h>
#include <stdlib.h>

#define BUFFER_SIZE (255+1)

// ------------------------------------------------------------------------------
char *s_get(char *s, size_t len)
{
char *cp;
for (cp=s; (*cp=getc(stdin)) != '\n' && (cp-s) < len-1; cp++ )
; // for-loop with empty body
*cp = '\0'; // null-terminate last character

return s;
}

// ------------------------------------------------------------------------------
void get_char(char *c)
{
char buffer[BUFFER_SIZE] = "";

s_get( buffer, BUFFER_SIZE );
*c = buffer[0];

return;
}

// ------------------------------------------------------------------------------
void get_float(float *x)
{
char buffer[BUFFER_SIZE] = "";

s_get( buffer, BUFFER_SIZE );
*x = atof( buffer );

return;
}

// ------------------------------------------------------------------------------
int main( void )
{
char prajh;
float x, y;

printf("Dwste 1o arithmo: ");
get_float( &x );

printf("Dwste 2o arithmo: ");
get_float( &y );

printf("Dwste symbolo prajhs: ");
get_char( &prajh );

switch ( prajh )
{
case '+':
printf("%f %c %f = %f\n", x, prajh, y, x+y);
break;
case '-':
printf("%f %c %f = %f\n", x, prajh, y, x-y);
break;
case '*':
printf("%f %c %f = %f\n", x, prajh, y, x*y);
break;
case '/':
printf("%f %c %f = %f\n", x, prajh, y, x/y);
break;
default:
puts("\tden yparxei tetoia prajh");
break;
}

return 0;
}

Αν δεν έχει άλλο παιδί κάποια απορία, δώστε μου 5 λεπτά να γράψω τον 3ο τρόπο υλοποίησης της προηγούμενης άσκησης, όπου εκεί πλέον έχουμε εμπεδώσει τη χρήση της s_get και απλά θέλω να δείξω έναν διαφορετικό τρόπο χρήσης συναρτήσεων.

Ευχαριστώ πολύ migf1, με ανακούφησες γιατί δεν είχα και πολλές επιτυχίες μέχρι τώρα... :D
Αυτό με το default το σκέφτηκα και εγώ αλλά ήταν αφότου κάνω το ποστ και έτσι είπα να μην το κάνω edit....