@grumpy check the two versions of one program :
Code:
/* remind.c */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_REMIND 50 //Μέγιστος αριθμος υπενθυμίσεων
#define MSG_LEN 60 //Μέγιστο μήκος μηνύματος υπενθύμισης
int read_line(char str[] , int n);
int main( void )
{
char reminders[MAX_REMIND][MSG_LEN+3];
char day_str[3] , msg_str[MSG_LEN+1]; // Oρίζει το msg_str με MSG_LEN + 1 χαρακτήρες αρα δεν βγαινει εκτος ορίων στην αποθήκευση του '\0' στην read_line.
int day , i , j , num_remind=0;
for(;;){
if( num_remind == MAX_REMIND){
printf("-- No space left --\n");
break;
}
printf(" Enter day and reminder : ");
scanf("%2d", &day); // Διάβασμα της ημέρας
if( day == 0 || day < 0 || day > 31)
break;
sprintf(day_str , "%2d" , day);
read_line(msg_str, MSG_LEN); // Διάβασμα της υπενθύμισης
for(i=0; i < num_remind; i++)
if(strcmp(day_str , reminders[i]) < 0 )
break; // Απο αυτο τον βροχο βγαίνουμε οχι απο τον for(;;)
for(j=num_remind; j>i; j--)
strcpy(reminders[j], reminders[j-1]);
strcpy(reminders[i] , day_str);
strcat(reminders[i] , msg_str);
num_remind++;
}
if( !num_remind )
exit(1);
printf("\nDay Reminder\n");
for(i=0; i < num_remind; i++)
printf(" %s\n" , reminders[i]);
return 0;
}
//----------------------------------------------------------------------
int read_line(char str[] , int n)
{
int ch , i =0 ;
while( (ch= getchar()) !='\n' && i<n)
str[i++]= ch;
str[i]='\0';
return i;
}
//----------------------------------------------------------------------
If you want to you can ignore the comments they are in greek language.
and remind2.c
Code:
/* remind2.c */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_REMIND 50 //Μέγιστος αριθμος υπενθυμίσεων
#define MSG_LEN 60 //Μέγιστο μήκος μηνύματος υπενθύμισης
int read_line(char str[] , int n);
int main( void )
{
char *reminder[MAX_REMIND];
char day_str[3] , msg_str[MSG_LEN+1]; // Oρίζει το msg_str με MSG_LEN + 1 χαρακτήρες αρα δεν βγαινει εκτος ορίων στην αποθήκευση του '\0' στην read_line.
int day , i , j , num_remind=0;
for(;;){
if( num_remind == MAX_REMIND){
printf("-- No space left --\n");
break;
}
printf(" Enter day and reminder : ");
scanf("%2d", &day); // Διάβασμα της ημέρας
if( day == 0 || day < 0 || day > 31)
break;
sprintf(day_str , "%2d" , day);
read_line(msg_str, MSG_LEN); // Διάβασμα της υπενθύμισης
for(i=0; i < num_remind; i++)
if(strcmp(day_str , reminders[i]) < 0 )
break; // Απο αυτο τον βροχο βγαίνουμε οχι απο τον for(;;)
for(j=num_remind; j>i; j--)
reminders[j] = reminders[j-1]; //Kάθε γραμμή του πίνακα περιέχει ένα string
reminder[i] = malloc(2 + strlen(msg_str) + 1 ); // 2 για την ημέρα + μήκος υπενθύμισης + '\0'
if(reminders[i] == NULL){
printf("--No space left--\n");
break;
}
strcpy(reminders[i] , day_str);
strcat(reminders[i] , msg_str);
num_remind++;
}
if( !num_remind )
exit(1);
printf("\nDay Reminder\n");
for(i=0; i < num_remind; i++)
printf(" %s\n" , reminders[i]);
return 0;
}
//----------------------------------------------------------------------
int read_line(char str[] , int n)
{
int ch , i =0 ;
while( (ch= getchar()) !='\n' && i<n)
str[i++]= ch;
str[i]='\0';
return i;
}
//----------------------------------------------------------------------
I think that we can say we avoid some space of wasting memory with the dynamic memory allocation. The program is a reminder ... if you want comments I can add in English.