vraxoulis Δημοσ. 16 Ιανουαρίου 2010 Δημοσ. 16 Ιανουαρίου 2010 γεια σας εχω το παρακατω προγραμμα που πρεπει να συνενωσω 3 πραγματα και να φτιαχνω μια συμβολοσειρα.. το προγραμμα λεει τα εξης: ενα προγραμμα θα διαβαζει ημερα(1-31),μηνα(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Nov,Oct,Dec) και ετος(2000-2999) και στη συνεχεια να τυπωνεται ως μια ενιαια γραμματοσειρα(ημερα μηνας ετος) και να ελεγχεται το μηκος της γραμματοσειρας να μην ειναι πανω απο 12 γραμματα.. εγω εχω κανει το παρακατω αλλα μαλλον ειναι λαθος: >#include<stdio.h> #include<string.h> main() { char *minas[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Nov","Oct","Dec"}; int i,j,l,k; int etos[999]; int meres[31]; int mera,Etos; char Minas[5]; char str1[12]; for(i=0;i<=999;i++) { etos[i]=2000+i; } for(j=0;j<31;j++) { meres[j]=1+j; } printf("dwse ti mera pou theleis(1-31)\n"); scanf("%d",&mera); for(j=0;j<31;j++) { if(mera!=meres[j]) { printf("den uparxei tetoia mera-->dwse mia mera pou na einai apo 1 ews 31\n"); scanf("%d",&mera); } } printf("dwse to mina pou theleis(na einai tis morfis:Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Nov,Oct,Dec\n"); gets(Minas); gets(Minas); for(l=0;l<12;l++) { if(minas[l]!=Minas) { printf("den uparxei tetoios minas-->dwse neo mina tis morfis:Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Nov,Oct,Dec\n"); gets(Minas); gets(Minas); } } printf("dwse to etos pou theleis na einai apo 2000-2999\n"); scanf("%d",&Etos); for(i=0;i<=999;i++) { if(Etos!=etos[i]) { printf("lathos etos-->dwse neo etos pou na einai apo 2000-2999\n"); scanf("%d",&Etos); } } for(k=0;k<2999;k++) { strcpy(str1,""); strncat(str1,mera,k); strncat(str1,Minas,k); strncat(str1,Etos,k); } puts(str1); }
yourse.gr Δημοσ. 16 Ιανουαρίου 2010 Δημοσ. 16 Ιανουαρίου 2010 Αρχικά , >if(minas[l]!=Minas) δεν συγκρίνουμε έτσι strings στην C. Δες την strcmp() . Έχεις ένα αποδεκτό έυρος αριθμών ( 1 - 31 , 2000-2999 ) γιατί να κάνεις πίνακες? >if (mera>1 && mera<31) και αντίστοιχα για το έτος. Τέλος, >for(k=0;k<2999;k++) { strcpy(str1,""); strncat(str1,mera,k); strncat(str1,Minas,k); strncat(str1,Etos,k); } τι ακριβώς κάνεις εδώ? Δυσκολέυτηκα να καταλάβω. mera,Etos είναι int δεν χρησιμοποιούνται με την strncat() . Δες λίγο πως δουλέυουν τα strcpy() και strncat()
vraxoulis Δημοσ. 16 Ιανουαρίου 2010 Μέλος Δημοσ. 16 Ιανουαρίου 2010 εκει στο τελος και καλα ηθελα να μου εμφανιζονται ολα μαζι μερα μηνας ετος
tespa_2002 Δημοσ. 16 Ιανουαρίου 2010 Δημοσ. 16 Ιανουαρίου 2010 Επίσης, για τη δημιουργία του string μπορείς να χρησιμοποιήσεις την sprintf. Δουλεύει ακριβώς όπως η printf, με τη διαφορά ότι παίρνει μία ακόμα παράμετρο στην αρχή. Η 1η παράμετρος είναι char *. Ο char * θα πρέπει να δείχνει σε μνήμη που έχεις δεσμεύσει (δυναμικά - με malloc, ή στατικά - π.χ δηλώνοντας ένα πίνακα χαρακτήρων με αυτό το όνομα). Η sprintf αντί να τυπώσει κάτι στην οθόνη κατασκευάζει το αντίστοιχο string και το αποθηκεύει στη μνήμη που δείχνεται από την 1η της παράμετρο. Π.χ. char output[12]; sprintf(output, "%2d %3s %4d", mera, minas, Etos);
vraxoulis Δημοσ. 16 Ιανουαρίου 2010 Μέλος Δημοσ. 16 Ιανουαρίου 2010 δηλαδη η συνενωση θα γινει καπως ετσι: strcpy(str1,strncat(mera,Etos,*minas));puts(str1);
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.