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

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

Δημοσ.

Ένα πρόβλημα που βλέπω είναι στο διάβασμα των doubles.

 

Άλλαξε το διάβασμα με την scanf_s σε:

 

>scanf_s("%lf",&yo[i]);

  • Απαντ. 1,6k
  • Δημ.
  • Τελ. απάντηση

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

Δημοσ.

Πάντως δεν χρειάζονται 2 loops...

 

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

#define MAXINPUT    256

/* -------------------------------------------------------
*
* -------------------------------------------------------
*/
int main( void )
{
   int i;
   char input[ MAXINPUT ] = {'\0'};
   double yo[5] = {0.0};
   double sum=0.0, min=0.0, max=0.0;

   for (i=0; i < 5; i++)
   {
       // read yo[i]
       printf("Enter average of player %d: ", i+1);
       fgets(input, MAXINPUT, stdin);    // get input as string
       yo[i] = strtod(input, NULL);    // convert input to double (unvalidated)

       if ( 0 == i )
           min = max = yo[i];
       else
       {
           if ( yo[i] > max )
               max = yo[i];
           if ( yo[i] < min )
               min = yo[i];
       }

       sum += yo[i];
   }

   printf( "min: %g, max: %g, avg: %g (%g/%d)\n", min, max, sum/i, sum,i );

   system( "pause" );  // windows only
   exit( EXIT_SUCCESS );
}

Δημοσ.

Ένα πρόβλημα που βλέπω είναι στο διάβασμα των doubles.

 

Άλλαξε το διάβασμα με την scanf_s σε:

 

>scanf_s("%lf",&yo[i]);

Έτρεξε κανονικά.Γιατί όμως είχε πρόβλημα με το f(έβγαζε αποτέλεσμα αλλά εντελώς λανθασμένα νούμερα της μορφής:-968645746700000.00000);f δεν χρησιμοποιεί η scanf για double;

Δημοσ.

 

...Γιατί όμως είχε πρόβλημα με το f(έβγαζε αποτέλεσμα αλλά εντελώς λανθασμένα νούμερα της μορφής:-968645746700000.00000);f δεν χρησιμοποιεί η scanf για double;

 

Τσου, %lf χρησιμοποιεί η scanf() για doubles... %f (%a %e %g) χρησιμοποιεί η pintf() είτε έχεις float είτε double

 

 

 

πάντως δεν μπορείς να πεις πως δεν σε έχω προειδοποιήσει γενικότερα για τη χρήση της scanf() :P

 

 

Δημοσ.

Ναι, απλώς με την atof() και να θέλει δεν μπορεί να κάνει validate αυτό που διάβασε (αν π.χ. περιέχει γράμματα θα του επιστρέψει 0).

 

Με τις strto?() μπορούμε μέσω του 2ου ορίσματος (καθώς και της <errno.h>) να αποκτήσουμε πλήρη έλεγχο στο τι μας περνάει και να ανταποκριθούμε ανάλογα (κάτι που δεν κάνω στον παραπάνω κώδικα, για αυτό περνάω ως NULL το 2ο όρισμα... αν δεις όμως για παράδειγμα τον κώδικα του cc-hexview στη σελίδα μου, είναι γεμάτος από strto?() ;) )

 

EDIT:

 

Βρήκα πρόχειρα ένα παράδειγμα από τον κώδικα του cc-hexview...

 

>
/* file: util.c */
...
/*********************************************************//**
* 
*************************************************************
*/
int s_to_BookId( const char *s, int maxid )
{
   int id;
   char *cpTail = NULL;

   if ( !s )
       return INVIDX;

   errno     = 0;
   id     = (int) strtol( s, &cpTail, 10 );
   if ( cpTail == s || '\0' != *cpTail || ERANGE == errno || id < 0 || id > maxid-1 )
       return INVIDX;

   return id;

}

 

Η συγκεκριμένη συνάρτηση μετατρέπει το c-string s σε έγκυρο κωδικό σελιδοδείκτη (bookmark id) χρησιμοποιώντας την strtol() πάνω στo s. Το if που ακολουθεί κάνει validate πως το s περιέχει έγκυρο ακέραιο (+ ότι είναι έγκυρο bookmark-id) αλλιώς επιστρέφει INVIDX... (invalid index, αυτή είναι μια σταθερά που την έχω ορίσει εγώ).

 

Το errno είναι καθολική μεταβλητή που ορίζεται όταν κάνεις #include <errno.h> (όπως και η σταθερά ERANGE).

 

Δημοσ.

char * st="DDDD";

 

 

γιατι με το st δεν εχω αccess στο string?

 

Έχεις. Μήπως βγαίνεις εκτός ορίων;

 

π.χ.

 

>
#include <stdio.h>
int main(int argc, char **argv)
{
   char* str = "ABCDE";
   putc(str[2],stdout);
   return 0;
}
// EXIT:   C

Δημοσ.

char * st="DDDD";

 

 

γιατι με το st δεν εχω αccess στο string?

 

>
#include <stdio.h>

int main(void)
{
       int i;
       char *st = "DDDD";

       for (i = 0; st[i]; i++)
               printf("%c\n", st[i]);

       return 0;
}

Έξοδος:
D
D
D
D

 

Γιατί κάνεις κάτι λάθος. Αν δώσεις παραπάνω λεπτομέρειες ίσως μπορούμε να σου πούμε τι είναι αυτό.

Δημοσ.

char * st="DDDD";

 

 

γιατι με το st δεν εχω αccess στο string?

 

Αν εννοείς πως δεν έχεις write access, τότε είναι επειδή το ορίζεις ως string-literal, αντί για σκέτο string.

Άλλαξε τον ορισμό του σε ...

 

>
char str[] = "DDDD";

 

Read-access έχεις έτσι κι αλλιώς και στις 2 περιπτώσεις.

Δημοσ.

http://knking.com/faq.html

 

εδω και καλα λεει οτι μονο οι καθηγητες της ταξης δικαιουνται να έχουν λυσεις στις ασκησεις?

 

εχω λογο που ρωταω.

 

P.S Ακυρο τωρα ειδα το remaining... :P αρα οι υπολοιπες θεωρουνται οτι θα λυθουν απο τους καθηγητες της ταξης και οχι απο τον ιδιο.

 

Eχει κανει ενα λαθος σε κάποιον λυμενο κωδικα .... θα τον ποσταρω σε λιγο.

Δημοσ.

http://knking.com/faq.html

 

εδω και καλα λεει οτι μονο οι καθηγητες της ταξης δικαιουνται να έχουν λυσεις στις ασκησεις?

 

εχω λογο που ρωταω.

 

P.S Ακυρο τωρα ειδα το remaining... :P αρα οι υπολοιπες θεωρουνται οτι θα λυθουν απο τους καθηγητες της ταξης και οχι απο τον ιδιο.

 

Περίπου, δεν λέει πως μόνο οι καθηγητές τις δικαιούνται, αλλά ότι μόνο για αυτούς είναι διαθέσιμες.

Δημοσ.

Περίπου, δεν λέει πως μόνο οι καθηγητές τις δικαιούνται, αλλά ότι μόνο για αυτούς είναι διαθέσιμες.

 

Δηλαδη μονο οι καθηγητες που διδασκουν στο πανεπιστημιο δικαιουνται να εχουν διαθεσιμες λυσεις?

και εγω που ασχολουμαι μονος μου πως θα διαβασω ? Απο το FAQ?

 

FEQ- ξε μου και γλιστρησα...

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

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