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

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

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

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

Δημοσ.

τελικα το διορθωσα και λειτουργει,εν μερη.

μεχρι ωρας,αφαιρεσα το desmeumenh απο παραμετρο της συναρτησης και επαιξε κανονικα.

πατησα δηλαδη Α,μου ειπε δεσμευτηκε επτυχως η θεση και ειναι η 1 1.
Κανονικα,λογω while,επρεπε να μου ξαναδωσει επιλογη να κλεισω θεση. Οποτε οταν ξαναπατησα Α,μου εβγαλε οτι δεν εγινε επιτυχημενη δεσμευση..δηλαδη λειτουργει την πρωτη μονο φορα..τι κολαει μετα και δεν λειτουργει...?

 

albNik διορθωσα και αυτο που μου ειπες.το εβαλα να γινεται στην main,με το που ξεκιναει το προγραμμα.

Δημοσ.
Ποσταρε όλο των κώδικα

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();       
Δημοσ.
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.

Δημοσ.
scanf("%s", &choice);

Αυτο δεν ειναι σωστο. Η scanf περιμενει string και εσυ της δινεις χαρακτηρα.

 

Στην C τα 'character' και "character" ειναι διαφορετικα πραγματακια....

 

Το πρωτο ειναι η αριθμητικη τιμη του character στο συνολο για τους χαρακτηρες που εχει το μηχανημα

ενω το δευτερο ειναι ενα string που έχει 2 αριθμητικες τιμές την μια του character και την άλλη του '\0' .

 

Εσυ στην scanf δινεις οδηγια να περιμενει string (%s) αυτο που περνας στην κληση της ειναι σκετος character ωστοσο

αρα θες %c.

fixed.

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

Δημοσ.
αρα  να βαλω κι εγω
choice = getchar();

??

update:το αλλαξα.

 

 

Kαλυτερα να βαλεις για μενα την scanf με ενα κενο πριν το %c. Εφοσον θες να διαβαζεις απλα εναν χαρακτηρα καθε φορα.

Δημοσ.
Kαλυτερα να βαλεις για μενα την scanf με ενα κενο πριν το %c. Εφοσον θες να διαβαζεις απλα εναν χαρακτηρα καθε φορα.

αποσο βλεπω,ιδιο αποτελεσμα εχουν.

Δημοσ.
αποσο βλεπω,ιδιο αποτελεσμα εχουν.

 

Τοτε μαλλον εχεις θεματακια με το πως υλοποιειται η συναρτηση.

Γιατι απο εισοδο και τον δεικτη που ειχες ειμαστε ενταξει.

Δημοσ.
Τοτε μαλλον εχεις θεματακια με το πως υλοποιειται η συναρτηση.

Γιατι απο εισοδο και τον δεικτη που ειχες ειμαστε ενταξει.

αυτο καταλαβα κι εγω. προσπαθω τωρα να την διορθωσω και να την κανω λειτουργικη οσες φορες και αν προσπαθει ο χρηστης να κλησει θεση,κι ενημερωνω κι εδω αν βγαλω(ή αν δεν βγαλω:P) ακρη..

Δημοσ.

λοιπον ακουστε την προοδο μου!

 

ο κωδικας μου μεχρι ωρας ειναι ακριβως ετσι:

 

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 που παει και δεν την βγαζει ως διαθεσιμη για να την κρατησω? υποψιαζεστε τι μπορω να κανω στην λειτουργια της συναρτησης για να την διορθωσω?

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

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