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

προβλημα συνενωσης στη C


vraxoulis

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

Δημοσ.

γεια σας εχω το παρακατω προγραμμα που πρεπει να συνενωσω 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);
}

               
                     
    
    
    
    
    
    
    
    
    
    
    
    
                 
                                               

Δημοσ.

Αρχικά ,

>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()

Δημοσ.

Επίσης, για τη δημιουργία του string μπορείς να χρησιμοποιήσεις την sprintf. Δουλεύει ακριβώς όπως η printf, με τη διαφορά ότι παίρνει μία ακόμα παράμετρο στην αρχή. Η 1η παράμετρος είναι char *. Ο char * θα πρέπει να δείχνει σε μνήμη που έχεις δεσμεύσει (δυναμικά - με malloc, ή στατικά - π.χ δηλώνοντας ένα πίνακα χαρακτήρων με αυτό το όνομα). Η sprintf αντί να τυπώσει κάτι στην οθόνη κατασκευάζει το αντίστοιχο string και το αποθηκεύει στη μνήμη που δείχνεται από την 1η της παράμετρο.

 

Π.χ.

char output[12];

 

sprintf(output, "%2d %3s %4d", mera, minas, Etos);

Αρχειοθετημένο

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

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