Estou com um programa em desenvolvimento, quando executo ele compila normalmente. Quando seleciono a opção 1 na execução ele me pede as informações que desejo adicionar à lista. Ele pede o RA do aluno e até ai beleza.. Mas quando pede o nome do arquivo (char arquivo[20]) ele simplesmente encerra a execução do programa. Acredito que seja problema de alocação dinâmica de memoria por meio de ponteiros, mas estou preso nessa parte, com uma dificuldade de como implementar isso.
PS: Sou estudante de Análise e Desenvolvimento de Sistemas.
Segue o código:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define tam 5
typedef struct tlista{
int ra[5];
char arquivo[20];
char extensao[20];
int matricula[5];
int ini;
int fim;
}tlista;
tlista lista;
int op;
void menu();
void show_info();
void add_info();
void del_info();
void clear();
int main(){
setlocale(LC_ALL, "portuguese");
op = 1;
lista.ini = 0;
lista.fim = 0;
while(op != 0){
system("cls");
show_info();
menu();
scanf("%d", &op);
switch(op){
case 1:
add_info();
break;
case 2:
del_info();
break;
//Trecho comentado, ainda em desenvolvimento. Ignorar case3.
/* case 3:
clear();
break; */
}
}
printf("\n\n Até breve! Nos vemos depois.");
return(0);
}
void menu(){
printf("Selecione uma alternativa:\n\n");
printf("[1] Adicionar Novo.\n");
printf("[2] Remover Existente.\n");
printf("[3] Limpar tudo.\n");
printf("[0] Sair.\n\n");
}
void show_info(){
int i;
for ( i = 0; i < tam; i++)
{
printf("--------------------\n");
printf("RA: %d\n", lista.ra[i]);
printf("Arquivo: %s.%s\n", lista.arquivo[i], lista.extensao[i]);
printf("Matricula: %d\n", lista.matricula[i]);
printf("--------------------\n");
}
}
void add_info(){
if (lista.fim == tam){
printf("A lista encheu! Remova elementos.\n\n");
system("pause");
}
else{
system("cls");
printf("Digite o RA do aluno: ");
scanf("%d", &lista.ra[lista.fim]);
printf("Digite o nome do arquivo: ");
scanf("%s", lista.arquivo[lista.fim]);
printf("Digite a extensao do arquivo: ");
scanf("%s", lista.extensao[lista.fim]);
printf("Digite a matricula do professor: ");
scanf("%d", lista.matricula[lista.fim]);
lista.fim++;
}
}
void del_info(){
if (lista.ini == lista.fim){
printf("A lista esvaziou! Adicione registros.");
system("pause");
}
else{
int i;
for(i=0; i <tam; i++){
lista.ra[i] = lista.ra[i+1];
lista.arquivo[i] = lista.arquivo[i+1];
lista.extensao[i] = lista.extensao[i+1];
lista.matricula[i] = lista.matricula[i+1];
}
lista.ra[lista.fim] = 0;
lista.arquivo[lista.fim] = "N/A";
lista.extensao[lista.fim] = "N/A";
lista.matricula[lista.fim] = 0;
lista.fim--;
}
}
//void clear();