Dr.Fuzzy Δημοσ. 14 Μαΐου 2009 Δημοσ. 14 Μαΐου 2009 Καλησπέρα σε όλους, Στην function που ακολουθεί: > /* activepulse: returns the active pulse of an element over a sorted array of known size */ int activepulse(double *b, double *xp, double *yp, int n) { int s1=sgn(*b-*xp+*yp); int sn=sgn(*(b+n-1)-*xp+*yp); int index, i; int sj; if(s1==sn){ if(s1>0) { index=n-2; return index; } else { index=0; return index; } } else{ for(i=2;i<=n;i++) { sj=sgn(*(b+i-1)-*xp+*yp); if(sj!=s1) { index=i-2; return index; } } } } , ενώ μου δουλεύει κανονικά, λαμβάνω το εξής warning από τον compiler (Code:Blocks + GNU GCC). ...|174|warning: control reaches end of non-void function| Μπορεί κάποιος πιο σχετικός να μου δώσει τα φώτα του, pls.
dark_banishing Δημοσ. 14 Μαΐου 2009 Δημοσ. 14 Μαΐου 2009 Σου λέει οτι και καλά ενώ έχεις δηλώσει επιστροφή int από την συνάρτηση ο compiler δεν βλέπει στο τέλος της συνάρτησης κάποιο return statement. Μπορείς να προσθέσεις ένα return με κάποιο error code στο τέλος άμα θες να βγάλεις το warning.
karabouzouk... Δημοσ. 15 Μαΐου 2009 Δημοσ. 15 Μαΐου 2009 >#include <stdio.h> int main(){ char ap; printf("\n\n............. (Y/N) --> "); scanf("%c", &ap); while (ap!='y' && ap!='n' && ap!='Y' && ap!='N'){ printf("\n\nLathos plhktrologhsh..\n.......... (Y/N) --> "); scanf("%c", &ap); } /* . . . . . sunexia programmatos... */ return 0; } Όταν ο κώδικας φτάνεο σε αυτό το σημείο αν δώσω λάθος τιμή, δηλαδή διαφορετική από y,n,Y,N , τότε εμφανίζει 2 φορές το μύνημα λάθους.... τι δεν κάνω σωστά..? ευχαριστώ... Το έβαλα εδώ για να μην ανοίγω νέο θέμα για μια ερώτηση...
teo64x Δημοσ. 15 Μαΐου 2009 Δημοσ. 15 Μαΐου 2009 >#include <stdio.h> int main(){ char ap; printf("\n\n............. (Y/N) --> "); scanf("%c", &ap); while (ap!='y' && ap!='n' && ap!='Y' && ap!='N'){ printf("\n\nLathos plhktrologhsh..\n.......... (Y/N) --> "); scanf("%c", &ap); } /* . . . . . sunexia programmatos... */ return 0; } Όταν ο κώδικας φτάνεο σε αυτό το σημείο αν δώσω λάθος τιμή, δηλαδή διαφορετική από y,n,Y,N , τότε εμφανίζει 2 φορές το μύνημα λάθους.... τι δεν κάνω σωστά..? ευχαριστώ... Το έβαλα εδώ για να μην ανοίγω νέο θέμα για μια ερώτηση... Δοκίμασε το παρακάτω: >#include <stdio.h> int main(){ char ap[2]; printf("\n\n............. (Y/N) --> "); scanf("%s", ap); while (ap[0]!='y' && ap[0]!='n' && ap[0]!='Y' && ap[0]!='N'){ printf("\n\nLathos plhktrologhsh..\n.......... (Y/N) --> "); scanf("%s", ap); } /* . . . . . sunexia programmatos... */ return 0; }
karabouzouk... Δημοσ. 15 Μαΐου 2009 Δημοσ. 15 Μαΐου 2009 Το ίδιο ακριβώς πρόβλημα και με τις δύο λύσεις που είπατε.... Σε σας κάνει το ίδιο όταν το τρέχετε..? Και για ποιο λόγο κάνατε αυτές τις αλλαγές..εννοώ τι φταίει και δεν δουλεύει το δικό μου..απλά για να καταλάβω τι δεν σκέφτομαι σωστά για επόμενη φορα......
teo64x Δημοσ. 15 Μαΐου 2009 Δημοσ. 15 Μαΐου 2009 Σε ό,τι αφορά εμένα, θεώρησα ότι παίζει κάποιο πρόβλημα με το null στο τέλος, το οποίο πρόβλημα δεν κάθισα να σκεφτώ πολύ, απλά το μυαλό μου πήγε σε πίνακα. Αν ο κώδικάς μου δε σου λύνει το πρόβλημα, δοκίμασε να αυξήσεις το όριο του πίνακα σε κάτι μεγαλύτερο (π.χ. 256) και δες αν λύνεται τότε.
Billman Δημοσ. 15 Μαΐου 2009 Δημοσ. 15 Μαΐου 2009 Δοκίμασε να βάλεις > fflush(stdin); πριν την while. Λογικά γίνεται μπέρδεμα με το input buffer. Editz0r: Πριν την scanf actually. Το πρόβλημα θα έπρεπε να υπήρχε μόνο με τον δικό σου τρόπο που διαβάζεις ένα χαρακτήρα μόνο. Δοκίμασα και του Τέο και παίζει κανονικά.
dark_banishing Δημοσ. 15 Μαΐου 2009 Δημοσ. 15 Μαΐου 2009 Καταρχήν η ερώτηση σου έπρεπε να είναι καινούριο θέμα γιατί δεν έχει σχέση με το παλιό. Το πρόβλημα είναι ότι για να εισάγεις χαρακτήρα πρέπει να πατήσεις 2 κουμπιά. 1 τον χαρακτήρα και άλλο ένα το enter. Δηλαδή εισάγεις στην ουσία 2 χαρακτήρες άρα και σου εμφανίζει 2 φορές το μήνυμα. Για να λύσεις το πρόβλημα μια λύση είναι έτσι >#include <stdio.h> char myGetChar() { char c; do { c = getchar(); } while ((c <= 0x20)); return c; } int main(){ char ap; printf("\n\n............. (Y/N) --> "); ap = myGetChar() ; while (ap!='y' && ap!='n' && ap!='Y' && ap!='N'){ printf("\n\nLathos plhktrologhsh..\n.......... (Y/N) --> "); ap = myGetChar() ; } /* . . . . . sunexia programmatos... */ return 0; } Μια άλλη λύση είναι με την συνάρτηση getch() που βρίσκεται στο <conio.h> αλλά αυτό δεν είναι standard c Επίσης και η λύση του teo δουλεύει
teo64x Δημοσ. 15 Μαΐου 2009 Δημοσ. 15 Μαΐου 2009 Δεκαεξαδικό αριθμό. Το κάναμε thread για όλες τις ερωτήσεις, τέλεια.
karabouzouk... Δημοσ. 15 Μαΐου 2009 Δημοσ. 15 Μαΐου 2009 Σε μένα δούλεψε βάζοντας την fflush(stdin); πριν το διάβασμα του yes no...επισης δούλεψε και με τον τρόπο του dark_banishing, αλλά και βάζωντας την getch() πριν το διάβασμα που διάβαζε οτιδήποτε "σκουπίδια" (τα οποία δεν ξέρω γιατί μου κάνουν τη ζωή δύσκολη...) θα το δοκιμάσω σε κανά άλλο pc να δω μήπως κάτι φταίει στο δικό μου..... ευχαριστώ όλους που ασχοληθήκατε!
3c0r1z Δημοσ. 16 Μαΐου 2009 Δημοσ. 16 Μαΐου 2009 @karabouzouk... Μακριά απο fflush(stdin);. Αυτή η εντολή ανάλογα τον μεταγλωττιστή μπορεί να έχει απροσδιόριστη συμπεριφορά. Συγκεκριμένα, int fflush(FILE* stream); Flushes stream stream and returns zero on success or EOF on error. Effect undefined for input stream. fflush(NULL) flushes all output streams. Μια πιθανή λύση μπορεί αν είναι η συγκεκριμένη: >int c; while ((c = getchar()) != EOF && c != '\n') ; /* κενή εντολή είναι δεν έχει γίνει κάποιο λάθος*/ Πηγές: http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351 http://www.gidnetwork.com/b-57.html http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html#fflush http://www.c-plusplus.de/forum/viewtopic-var-t-is-39349.html
georgemarios Δημοσ. 16 Μαΐου 2009 Δημοσ. 16 Μαΐου 2009 Παιδια το 0χ20 τι συμβολιζει? το δεκαεξαδικο 0χ20 (δηλ το 32 σε δεκαδικο) ειναι η ascii τιμη του space character ' ' Επισης ειναι η ελαχιστη εκτυπωσιμη τιμη χαρακτηρα, οτιδηποτε μικροτερο ειναι control character και δεν εμφανιζεται στην οθονη
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.