migf1 Δημοσ. 26 Απριλίου 2013 Δημοσ. 26 Απριλίου 2013 Δεν πρεπει να συμπεριλάβεις το αρχειο επικεφαλιδας(που ειναι δηλωμενη με το extern) στο .c οπου οριζεις την global για να μπορει να τσεκαρει ετσι ο μεταγλωτιστης αν υπάρχει συνεπεια μεταξυ ορισμου και δηλωσης ? Οπως το εκανε και πιο πανω απο το δικο σου ποστ ο ημιθεος με τα αρχεια που εδωσε Ναι, αλλά εγώ είπα πως δεν πρέπει να βάλεις στο .h τον ορισμό της global (εσύ μιλάς για την δήλωσή της).
Frod0 Δημοσ. 1 Μαΐου 2013 Δημοσ. 1 Μαΐου 2013 Καλησπέρα, είναι εφικτό να κάνω ένα πρόγραμμα να περιμένει τον χρήστη περιορισμένο χρονικό διάστημα(πχ 2 λεπτά) να πληκτρολογήσει μια επιλογή και άν ο χρήστης τελικά δεν πληκτρολογήσει τίποτα σε αυτο το διάστημα το πρόγραμμα να τερματιστεί;
jsiskos Δημοσ. 1 Μαΐου 2013 Δημοσ. 1 Μαΐου 2013 Καλησπέρα, είναι εφικτό να κάνω ένα πρόγραμμα να περιμένει τον χρήστη περιορισμένο χρονικό διάστημα(πχ 2 λεπτά) να πληκτρολογήσει μια επιλογή και άν ο χρήστης τελικά δεν πληκτρολογήσει τίποτα σε αυτο το διάστημα το πρόγραμμα να τερματιστεί; Με αφορμή την χρήσιμη και εξαιρετικά πνευματώδη συνεισφορά της πάπιας, παραθέτω μερικά ενδιαφέροντα κατά τη γνώμη μου links. How to use timer in C? timers in c Γενικά βάζοντας σε μια μηχανή αναζήτησης το "timer in c" πιστεύω ότι θα καλυφθείς. 2
Anubis13 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Απορια εστω οτι εχω ενα πινακα char tmp[] = "ABCDEFGΗ" και θέλω σε καθε θεση του ι να εχω δυο χαρακτηρες. Πως το κανω?
akisk Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Καταρχάς δεν γίνεται να έχεις παραπάνω από ένα χαρακτήρα σε μία θέση πίνακα. Εσύ θες πίνακα από strings αν κατάλαβα καλά; Μια λύση είναι να δημιουργήσεις ένα πίνακα χαρακτήρων δύο διαστάσεων.
migf1 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 ... Δεν παιζει ομως! Που κανω λαθος στην σκεψη Στο ότι αυτό που ζητάς δεν είναι string αλλά πίνακας από strings, με το κάθε string να έχει θέση για μέχρι 2 ωφέλιμους χαρακτήρες... char tmp[][3] = { {"ab"}, {"58"}, {"r5"}, {"ji"}, {"\0"} }; int i = 0; while ( *tmp[i] ) puts( tmp[i++] );
Anubis13 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Xμμ με παιδευει η C γι'αυτο που θελω αλλα δεν το βαζω κατω Σωστος ο τροπος σου migf1 αλλα επειδη ο πινακας που ηδη εχω ειναι ορισμενος μονοδιαστατος δεν με πειραζει να το περναω σε 2D αλλα ψαχνω κατι αλλο. Αυτο σημαινει πως αν θελω ν-χαρακτηρων string χρειαζομαι ν-διαστατο πινακα...
akisk Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Αυτο σημαινει πως αν θελω ν-χαρακτηρων string χρειαζομαι ν-διαστατο πινακα... Πάλι δύο διαστάσεων θα είναι ο πίνακας που χρειάζεσαι!
Anubis13 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Πάλι δύο διαστάσεων θα είναι ο πίνακας που χρειάζεσαι! σωστα. Δεν το βαζω να σκεφτει σημερα!
migf1 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Xμμ με παιδευει η C γι'αυτο που θελω αλλα δεν το βαζω κατω Χεχε... Σωστος ο τροπος σου migf1 αλλα επειδη ο πινακας που ηδη εχω ειναι ορισμενος μονοδιαστατος δεν με πειραζει να το περναω σε 2D αλλα ψαχνω κατι αλλο. Δεν κατάλαβα τι εννοείς. Για γίνε πιο αναλυτικός. Αυτο σημαινει πως αν θελω ν-χαρακτηρων string χρειαζομαι ν-διαστατο πινακα... Αν εννοείς να έχεις string ν-χαρακτήρων σε κάθε θέση, 2Δ θα είναι πάλι... βάλε ν+1 αντί για 3 στον παραπάνω ορισμό. Αν πάλι εννοείς πως το ν θα είναι άγνωστο και μεταβλητό για κάθε string, τότε θες έναν πίνακα από δείκτες χαρακτήρων... char *tmp2[] = { "---", "3243432", "dsa", "4324ff", NULL }; i = 0; while ( tmp2[i] ) puts( tmp2[i++] );
Anubis13 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Δεν κατάλαβα τι εννοείς. Για γίνε πιο αναλυτικός. Κανω διαφορα και καταληγω σε ενα τετοιο πινακα char tmp[] = "ABCDEFGΗ" Σκεψου οτι δεν ειναι ορισμενος ετσι απλα εχω καταληξει σε ενα τετοιο πινακα με n χαρακτηρες σε καθε θεση του. Θελω τωρα απο αυτον τον πινακα να παιρνω ανα 2 τους χαρακτηρες με καποιο τροπο ωστε να συνεχισω αυτο που κανω.
migf1 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Κανω διαφορα και καταληγω σε ενα τετοιο πινακα char tmp[] = "ABCDEFGΗ" Σκεψου οτι δεν ειναι ορισμενος ετσι απλα εχω καταληξει σε ενα τετοιο πινακα με n χαρακτηρες σε καθε θεση του. Θελω τωρα απο αυτον τον πινακα να παιρνω ανα 2 τους χαρακτηρες με καποιο τροπο ωστε να συνεχισω αυτο που κανω. Δεν το πιάνω ρε συ τι εννοείς όταν λες πως ο παραπάνω tmp[] πίνακας έχει ν χαρακτήρες σε κάθε θέση του. Εγώ τον βλέπω να έχει 8+1 θέσεις, όλες πιασμένες (με την ένατη θέση πιασμένη από το '\0').
Anubis13 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Δεν το πιάνω ρε συ τι εννοείς όταν λες πως ο παραπάνω tmp[] πίνακας έχει ν χαρακτήρες σε κάθε θέση του. Εγώ τον βλέπω να έχει 8+1 θέσεις, όλες πιασμένες (με την ένατη θέση πιασμένη από το '\0'). E αυτος εχει 8 εστω οτι μετα απο πραξεις και παμπολλες πραξεις εχουμε καταληξει σε ενα μονοδιαστατο πινακα ν χαρακτηρων. απο εκει και επειτα πως συνεχιζω?
migf1 Δημοσ. 9 Μαΐου 2013 Δημοσ. 9 Μαΐου 2013 Κάτι τέτοιο ίσως; #include <stdio.h> #include <stdlib.h> #include <string.h> #define QUIT_ON_1ST_NULL 1 /* true */ /**************************************************//** * ****************************************************** */ char **new_stepped( const char *s, /* string to be walked */ int step, /* walking step */ size_t maxelems /* max elements in the newly created stepped */ ) { char **ret = NULL; /* newly created stepped to be returned */ char *t = NULL; /* for walking s */ size_t slen = 0; /* for length of s */ int i = 0, j = 0; /* sanity checks */ if ( step < 1 || maxelems < 1 ) goto fail; /* alloc cleared mem for maxelems char pointers */ ret = calloc( maxelems, sizeof(char *) ); if ( NULL == ret ) goto fail; t = (char *)s; /* initially t points to s */ slen = strlen(s); /* get length of s */ /* foreach char pointer ret[i] and until t points inside s... */ for (i=0; t < s+slen && i < maxelems; i++) { ret[i] = calloc( step+1, sizeof(char) );/* alloc cleared mem for step+1 chars */ if ( NULL == *ret ) goto cleanup_and_fail; strncpy( ret[i], t, step ); /* copy up to step chars of t into *ret */ t += step; /* move t step places forward */ } return ret; cleanup_and_fail: for (j=i-1; j > -1; j--) free( ret[j] ); free( ret ); fail: fprintf( stderr, "*** %s(): failed to create the string table!\n", __func__ ); return NULL; } /**************************************************//** * ****************************************************** */ int stepped_free( char ***stepped, /* passed by ref (defined as **stepped in the caller) */ size_t maxelems /* maximum elements to be freed (programmer's resposnibility) */ ) { size_t i = 0; /* sanity checks */ if ( maxelems < 1 ) { fprintf( stderr, "*** %s(): failed to free the string table (invalid maxelems)", __func__); return 0; /* false */ } /* nothing to free (no memory leaks possible, so we return true) */ if ( !stepped || !(*stepped) ) return 1; /* true */ /* free each element, then set the main pointer to NULL */ for (i=0; i < maxelems; i++) if ( (*stepped)[i] ) free( (*stepped)[i] ); *stepped = NULL; return 1; /* true */ } /**************************************************//** * ****************************************************** */ void stepped_print( char **stepped, /* stepped to be printed */ size_t maxelems, /* max elems to print (programmer's resposnibility) */ int quitOn1stNull /* pass as 0 for printing NULL elements too */ ) { int i = 0; /* sanity checks */ if ( maxelems < 1 ) { fprintf( stderr, "*** %s(): invalid maxelems\n", __func__); return; } if ( NULL == stepped ) { fprintf( stderr, "*** %s(): NULL pointer as argument\n", __func__); return; } /* print elements, one per line */ for (i=0; i < maxelems; i++) { /* print nonNULL element */ if ( stepped[i] ) { puts( stepped[i] ); continue; } /* stop on 1st NULL element? */ /* yes */ if ( quitOn1stNull ) break; /* no */ puts( "<NULL>" ); } return; } /**************************************************//** * ****************************************************** */ int main( void ) { const int MaxElems = 10; const int Step = 2; char *s = "1234567890"; char **stepped = new_stepped( s, Step, MaxElems ); stepped_print( stepped, MaxElems, !QUIT_ON_1ST_NULL ); stepped_free( &stepped, MaxElems ); system("pause"); /* windows only */ exit(0); } Έξοδος: 12 34 56 78 90 <NULL> <NULL> <NULL> <NULL> <NULL> Press any key to continue . . . Αν θες να σταματάει το τύπωμα πριν 1ο NULL στοιχείο, βγάλε το θαυμαστικό μπροστά από τo όρισμα QUIT_ON_1ST_NULL στην κλήση της stepped_print(). ΥΓ. Μπορεί να έχει bugs ο κώδικας, δεν τον έχω δοκιμάσει εξαντλητικά.
Προτεινόμενες αναρτήσεις