Ciao a tutti,
ho un problema con questo codice.
Dovrei modificare il programma originale, che salva dei promemoria e poi li ordina, per far sì che in caso di data negativa o superiore a 31 scriva errore e vada avanti,le mie modifiche hanno due asterischi di fianco per far capire quali sono.
Se immetto solo il numero "32" va tutto bene ma se scrivo per esempio "32 cena da Luca" mostra l'output "Enter day and reminder:"di continuo senza fermarsi,dove sbaglio?
Grazie
codice:
#include <stdio.h>
#include <string.h>
#define MAX_REMIND 50 /* numero massimo di promemoria */
#define MSG_LEN 60 /* lunghezza massima dei messaggi */
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];
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)
break;
else if (day < 0 || day > 31){ **
printf("Errore\n"); **
continue;} **
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 (j = num_remind; j > i; j--)
strcpy(reminders[j], reminders[j-1]);
strcpy(reminders[i], day_str);
strcat(reminders[i], msg_str);
num_remind++;
}
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')
if (i < n)
str[i++] = ch;
str[i] = '\0';
return i;
}