Boa tarde! Meu problema é que o conteúdo da lista encadeada não está sendo impresso, eu acredito que o problema possa estar no laço de repetição, porém já tentei por exemplo, trocar pelo while, e mesmo assim não funcionou. Desde já agradeço ela ajuda.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.c>
typedef struct lembrete Lembrete;
struct lembrete{
char lembretes[200];
int dia;
int mes;
};
typedef struct node Node;
struct node{
Lembrete reminder;
struct node *prox;
};
Node* criar_node(){
Node* novo=(Node*)malloc(sizeof(Node));
return novo;
}
Node* inserir_fim(Node* Lista, int dia, int mes, char* string){
Node* novo = criar_node();
novo->reminder.dia = dia;
novo->reminder.mes = mes;
strcpy(novo->reminder.lembretes, string);
if(Lista==NULL){
novo->prox=NULL;
Lista=novo;
}
else{
Node* aux = Lista;
while(aux->prox!=NULL){
aux = aux->prox;
}
novo->prox=NULL;
aux->prox=novo;
}
printf("Lembrete cadastrado com sucesso!");
return Lista;
}
void imprimir_mes(Node* Lista, int mes_ver){
Node* ant = NULL;
Node* p = Lista;
const char *months[]={
"\nJaneiro","\nFevereiro","\nMarço","\nAbril","\nMaio","\nJunho","\nJulho","\nAgosto","\nSetembro","\nOutubro","\nNovembro","\nDezembro"
};
int month_days[] = {0, 31, 29, 31, 30, 31, 30, 31 ,31 ,30, 31, 30, 31};
int year = 2020;
int first_day;
int x;
int y;
int z;
int j;
x = (year - 1.)/4.0;
y = (year - 1.)/100.;
z = (year - 1.)/400.;
first_day = (year + x - y + z) %7;
int i;
printf("%s %d\n\n", months[mes_ver-1], year);
printf("Dom Seg Ter Qua Qui Sex Sab\n");
for(i = 1; i < mes_ver; i++)
{
first_day = ((first_day + month_days[i])%7);
}
for(i = 1; i <= 1 + first_day * 5; i++)
{
printf(" ");
}
for(i = 1; i <= month_days[mes_ver]; i++)
{
while (p != NULL && p->reminder.mes != mes_ver && p->reminder.dia != i){
ant = p;
p = p->prox;
}
if (ant == NULL && p != NULL) {
textcolor(4);
printf("%2d", i);
textcolor(7);
}
else{
printf("%2d", i);
}
if((i + first_day)%7 > 0)
printf(" ");
else
printf("\n ");
}}
void imprimir(Node* Lista){
int mes_ver;
Node* aux;
printf("Digite o mês que deseja visualizar(em número): ");
scanf("%d", &mes_ver);
imprimir_mes(Lista, mes_ver);
printf("LEMBRETES\n");
for(aux=lista; aux!=NULL; aux=aux->prox)
{if(aux->reminder.mes==mes_ver)
{
printf("Dia %d: %s", aux->reminder.dia, aux->reminder.lembretes);
}
}}
Node* retirar(Node *Lista){
int month, day;
printf("Digite o dia do lembrete que deseja deletar:");
scanf("%d", &day);
printf("Digite o mês do lembrete que deseja deletar:");
scanf("%d", &month);
Node* ant =NULL;
Node* aux = Lista;
while(aux!=NULL && aux->reminder.mes!=month){
ant = aux;
aux=aux->prox;}
if(aux == NULL)
{
printf("\nNão existe nenhum lembrete cadastrado");
return Lista;
}
if(ant == NULL)
{
Lista = aux->prox;}
else{
ant->prox=aux->prox;}
free(aux);
return Lista;
}
void libera(Node* Lista){
while(Lista!=NULL){
libera(Lista->prox);
free(Lista);
}
}
int main(){
char string[200];
int opt, dia, mes;
do{
Node* lista=NULL;
printf("Escolha a opção\n");
printf("0. Sair\n");
printf("1. Apagar todos os lembretes\n");
printf("2. Exibir lembretes\n");
printf("3. Adicionar lembrete\n");
printf("4. Remover lembrete\n");
printf("Opção: "); scanf("%d", &opt);
switch(opt){
case 0:
libera(lista);
break;
case 1:
libera(lista);
break;
case 2:
imprimir(lista);
system("pause");
break;
case 3:
printf("Digite o dia: ");
scanf("%d", &dia);
printf("Digite o mês(em número): ");
scanf("%d", &mes);
printf("Digite o lembrete: ");
scanf("%s", string);
lista=inserir_fim(lista, dia, mes, string);
system("pause");
break;
case 4:
lista = retirar(lista);
break;
default:
printf("Comando invalido\n\n");
}
system("cls");
}while(opt!=0);
}