albNik Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 OXI μέσα στην book_seat η malloc. Για αντίγραφο της μεταβλητής desmeumenh δεσμεύεις εκεί. ΠΡΙΝ την καλέσεις κάνε malloc!
koslibpro Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 τελικα το διορθωσα και λειτουργει,εν μερη. μεχρι ωρας,αφαιρεσα το desmeumenh απο παραμετρο της συναρτησης και επαιξε κανονικα. πατησα δηλαδη Α,μου ειπε δεσμευτηκε επτυχως η θεση και ειναι η 1 1.Κανονικα,λογω while,επρεπε να μου ξαναδωσει επιλογη να κλεισω θεση. Οποτε οταν ξαναπατησα Α,μου εβγαλε οτι δεν εγινε επιτυχημενη δεσμευση..δηλαδη λειτουργει την πρωτη μονο φορα..τι κολαει μετα και δεν λειτουργει...? albNik διορθωσα και αυτο που μου ειπες.το εβαλα να γινεται στην main,με το που ξεκιναει το προγραμμα.
koslibpro Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 Ποσταρε όλο των κώδικα main.c int main() { // arxikopoihsh tou pinaka twn thesewn for(i=0;i<10;i++){ for(j=0;j<4;j++){ theseis[i+1][j+1] = 0; } } desmeumenh =(char*) malloc(10 * sizeof(char)); cont = TRUE; while (cont == TRUE ){ // oi epiloges tou xrhsth printf("\n \ \nParakalw plhktrologhste A gia krathsh theshs \nParakalw plhktrologhste Q gia eksodo apo to programma"); printf("\nEpilogh: "); scanf("%s", &choice); switch(choice){ case 'A': check1 = book_seat(); if(check1 == TRUE){ printf("\nH thesh sas desmeutke epityxws! Einai h %s", desmeumenh); } else { printf("\nH thesh den desmeutike epityxws."); } break; case 'Q': printf("\nEksodos..."); cont = FALSE; break; } } return (EXIT_SUCCESS); } sunarthseis.c int book_seat(){ for(i=0;i<10;i++){ for(j=0;j<4;j++){ if(theseis[i+1][j+1] == 0){ theseis[i+1][j+1] = 1; sprintf(desmeumenh,"%d %d",i+1,j+1); return TRUE; } else { return FALSE; } } } } και header.h int i,j; int check1; char *desmeumenh; int theseis[9][3]; int cont ; char choice; // h arxikh epilogh tou xrhsth int book_seat();
Star_Light Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 scanf("%s", &choice); Αυτο δεν ειναι σωστο. Η scanf περιμενει string και εσυ της δινεις χαρακτηρα. Στην C τα 'c' και "c" ειναι διαφορετικα πραγματακια.... Το πρωτο ειναι η αριθμητικη τιμη του c χαρακτηρα στο συνολο για τους χαρακτηρες που εχει το μηχανημα ενω το δευτερο ειναι ενα string που έχει 2 αριθμητικες τιμές την μια του c και την άλλη του '\0' . Φυσικα αυτο δεν εχει καμια σχεση με το format string της συναρτησης μεσα στο οποιο μπαινει το %s τωρα απλα ειναι μια μικρη αναφορα για τις διαφορες μεταξυ ενος χαρακτηρα και ενος string. Εσυ στην scanf δινεις οδηγια να περιμενει string (%s) αυτο που περνας στην κληση της ειναι σκετος character ωστοσο αρα θες %c. Kαι οχι απλα %c αλλα _%c το _ ειναι το κενο.... scanf(" %c" , &choice); το κενο που μπαινει μπροστα ουσιαστικα αγνοει τον χαρακτηρα αλλαγης γραμμης και αλλους white space που μενει στο buffer και περναει σε επομενη κληση της συνάρτηση εφοσον την εχεις και μεσα σε loop.
koslibpro Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 scanf("%s", &choice); Αυτο δεν ειναι σωστο. Η scanf περιμενει string και εσυ της δινεις χαρακτηρα. Στην C τα 'character' και "character" ειναι διαφορετικα πραγματακια.... Το πρωτο ειναι η αριθμητικη τιμη του character στο συνολο για τους χαρακτηρες που εχει το μηχανημα ενω το δευτερο ειναι ενα string που έχει 2 αριθμητικες τιμές την μια του character και την άλλη του '\0' . Εσυ στην scanf δινεις οδηγια να περιμενει string (%s) αυτο που περνας στην κληση της ειναι σκετος character ωστοσο αρα θες %c. fixed. ακομα ομως δεν δουλευει..και νομιζω οτι σωστα δεν δουλευει γιατι εχω την εντυπωση οτι ειναι λαθος φτιαγμενη η συναρτηση..θα προσπαθησω να την διορθωσω και θα ενημερωσω..
albNik Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 Αυτό έχει ένα θέμα char choice; scanf("%s", &choice); Δες εδώ http://www.insomnia.gr/topic/469718-%CE%B1%CF%83%CE%BA%CE%B7%CF%83%CE%B7-%CF%83%CF%84%CE%B7%CE%BD-c/ Και εδώ int theseis[9][3]; //11 5 πρέπει να είναι με βάση αυτό for(i=0;i<10;i++){ for(j=0;j<4;j++){ theseis[i+1][j+1] = 0; }
koslibpro Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 αρα να βαλω κι εγω choice = getchar(); ?? update:το αλλαξα.
Star_Light Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 αρα να βαλω κι εγω choice = getchar(); ?? update:το αλλαξα. Kαλυτερα να βαλεις για μενα την scanf με ενα κενο πριν το %c. Εφοσον θες να διαβαζεις απλα εναν χαρακτηρα καθε φορα.
koslibpro Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 Kαλυτερα να βαλεις για μενα την scanf με ενα κενο πριν το %c. Εφοσον θες να διαβαζεις απλα εναν χαρακτηρα καθε φορα. αποσο βλεπω,ιδιο αποτελεσμα εχουν.
albNik Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 Και αυτό πάιζει char choise[3]; scanf("%s",choise); if(*choise=='A') check1 = book_seat(); ... else if(*choise=='Q') ...
koslibpro Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 Και αυτό πάιζει char choise[3]; scanf("%s",choise); if(*choise=='A') check1 = book_seat(); ... else if(*choise=='Q') ... μου φαινεται overkill αυτο
Star_Light Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 αποσο βλεπω,ιδιο αποτελεσμα εχουν. Τοτε μαλλον εχεις θεματακια με το πως υλοποιειται η συναρτηση. Γιατι απο εισοδο και τον δεικτη που ειχες ειμαστε ενταξει.
koslibpro Δημοσ. 23 Δεκεμβρίου 2012 Δημοσ. 23 Δεκεμβρίου 2012 Τοτε μαλλον εχεις θεματακια με το πως υλοποιειται η συναρτηση.Γιατι απο εισοδο και τον δεικτη που ειχες ειμαστε ενταξει. αυτο καταλαβα κι εγω. προσπαθω τωρα να την διορθωσω και να την κανω λειτουργικη οσες φορες και αν προσπαθει ο χρηστης να κλησει θεση,κι ενημερωνω κι εδω αν βγαλω(ή αν δεν βγαλω) ακρη..
koslibpro Δημοσ. 24 Δεκεμβρίου 2012 Δημοσ. 24 Δεκεμβρίου 2012 λοιπον ακουστε την προοδο μου! ο κωδικας μου μεχρι ωρας ειναι ακριβως ετσι: int book_seat(){ for(i=0;i<10;i++){ for(j=0;j<4;j++){ if(theseis[i+1][j+1] == 0){ theseis[i+1][j+1] = 1; sprintf(desmeumenh,"%d %d",i+1,j+1); return TRUE; // } else { //return FALSE; } } } } Παταω Α,ολα οκ μου λεει δεσμευτηκε η θεση και ειναι η 1 1,το ξαναπαταω παλι τα ιδια και η θεση ειναι η 1 2 μετα η 1 3 μετα η 1 4 και μετα η 2 2 !! γιατι η 2 2? η 2 1 που παει και δεν την βγαζει ως διαθεσιμη για να την κρατησω? υποψιαζεστε τι μπορω να κανω στην λειτουργια της συναρτησης για να την διορθωσω?
Προτεινόμενες αναρτήσεις