Δημοσιεύτηκε: 28 Ιούλ 2011, 09:55
Μια χαρά το προσέγγισες αυτή τη φορά! Το πρόβλημα με το warning είναι πως στη c_function το χ το δηλώνεις σαν όρισμα της συνάρτησης αλλά μετά τα ορίζεις και ως τοπική μεταβλητή.
Και μια σημείωση, την table_characters[BUFFER_SIZE] στην main() δεν τη χρησιμοποιείς, οπότε δεν χρειάζεται να την ορίσεις στην main. Επίσης, για να τυπώσουμε long βάζουμε %ld στην printf (το %lu που έχεις το βάζουμε για να τυπώσουμε unsigned long).
ΑΝ είμαστε όλοι οκ με την λύση που έδωσα για την άσκηση αυτή και δεν έχουμε απορίες (αν έχετε απορίες, ΓΡΑΨΤΕ ΤΕΣ να τις λύσουμε) δείτε έναν ακόμα τρόπο επίλυσης της άσκησης και πείτε αν δεν καταλαβαίνετε κάτι και τι, για να το λύσουμε κι αυτό πριν πάμε παρακάτω. Ξεκινήστε να τον διαβάζετε από την main() στο τέλος και όποια συνάρτηση συναντάτε δείτε τον κώδικά της.
ΥΓ. Για να καταλαβαίνετε καλύτερα τους κώδικες, μην τους κοιτάτε μόνο από εδώ, κάντε τους αντιγραφή μέσα στον editor που χρησιμοποιείτε που σας είναι οικείο σαν περιβάλλον και να τους τρέχετε κιόλας για να καταλαβαίνετε ακριβώς πως δουλεύουν. Και για ότι απορίες προκύψουν, εδώ είμαστε
Και μια σημείωση, την table_characters[BUFFER_SIZE] στην main() δεν τη χρησιμοποιείς, οπότε δεν χρειάζεται να την ορίσεις στην main. Επίσης, για να τυπώσουμε long βάζουμε %ld στην printf (το %lu που έχεις το βάζουμε για να τυπώσουμε unsigned long).
ΑΝ είμαστε όλοι οκ με την λύση που έδωσα για την άσκηση αυτή και δεν έχουμε απορίες (αν έχετε απορίες, ΓΡΑΨΤΕ ΤΕΣ να τις λύσουμε) δείτε έναν ακόμα τρόπο επίλυσης της άσκησης και πείτε αν δεν καταλαβαίνετε κάτι και τι, για να το λύσουμε κι αυτό πριν πάμε παρακάτω. Ξεκινήστε να τον διαβάζετε από την main() στο τέλος και όποια συνάρτηση συναντάτε δείτε τον κώδικά της.
- Κώδικας: Επιλογή όλων
/* ******************************
* 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_int(int *n)
{
char buffer[BUFFER_SIZE] = "";
s_get( buffer, BUFFER_SIZE );
*n = atoi( buffer );
return;
}
// ------------------------------------------------------------------------------
void get_long(long int *l)
{
char buffer[BUFFER_SIZE] = "";
s_get( buffer, BUFFER_SIZE );
*l = atol( buffer );
return;
}
// ------------------------------------------------------------------------------
void get_float(float *x)
{
char buffer[BUFFER_SIZE] = "";
s_get( buffer, BUFFER_SIZE );
*x = atof( buffer );
return;
}
// ------------------------------------------------------------------------------
int main( void )
{
char c;
int y,z;
long int l1,l2;
float f1, f2;
printf("Dwste enan xarakthra: ");
get_char( &c );
printf("dwsate ton xarakthra: %c\n", c);
printf("Dwste enan akeraio: ");
get_int( &y );
printf("Dwste enan akeraio: ");
get_int( &z );
printf("%d * %d = %d\n", y, z, y * z);
printf("Dwste enan megalo akeraio: ");
get_long( &l1 );
printf("Dwste enan megalo akeraio: ");
get_long( &l2 );
printf("%ld + %ld = %ld\n", l1, l2, l1 + l2);
printf("Dwste enan pragmatiko arithmo: ");
get_float( &f1 );
printf("Dwste enan pragmatiko arithmo: ");
get_float( &f2 );
printf("%f1 / %f2 = %f\n", f1, f2, f1 / f2);
return 0;
}
ΥΓ. Για να καταλαβαίνετε καλύτερα τους κώδικες, μην τους κοιτάτε μόνο από εδώ, κάντε τους αντιγραφή μέσα στον editor που χρησιμοποιείτε που σας είναι οικείο σαν περιβάλλον και να τους τρέχετε κιόλας για να καταλαβαίνετε ακριβώς πως δουλεύουν. Και για ότι απορίες προκύψουν, εδώ είμαστε