S|N
Power Member
Por favor ajudem-me sou bosta em c mas tenho que aprender isto!
Código (os erros estão identificados a vermelho):
#include <stdio.h>
#include <string.h>
#define MAX_ALUNOS 30
#define MAX_NOME 60
/*Estruturas de dados*/
/*char nome[MAX_ALUNOS][MAX_NOME]; para dentro do main*/
/*int numero[Max_Alunos]; para dentro do main*/
/*int nalunos; para dentro do main*/
/*----------------------------------------------------------------------------*/
/* PROTOTIPOS */
/*----------------------------------------------------------------------------*/
void op_inscrever_aluno(int *nalunos, int numero[], char nome[][MAX_ALUNOS]);
void op_listar_alunos(char nome[][MAX_ALUNOS]);
void op_remover_aluno(int numero[], int *nalunos);
int remover(int aluno, int numero[], int *nalunos);
void shift_esquerda_alunos(int posicao, int *nalunos, int numero[], char name[][MAX_ALUNOS]);
void carregar_ficheiro(void);
void guardar_ficheiro(void);
/*---------------------------------------------------*/
/* Inscreve um aluno, fornecidos o nome e o numero */
/*---------------------------------------------------*/
void inscrever_aluno(int *nalunos, int numero[], char nome[][MAX_ALUNOS])
{
fflush(stdin);
printf("Qual o nome do aluno?");
scanf("%s",nome[*nalunos]);
printf("Que numero deseja atribuir?");
scanf("%d",&numero[*nalunos]);
(*nalunos)++;
}
/*-------------------*/
/* Lista os alunos */
/*-------------------*/
void op_listar_alunos(char nome[][MAX_ALUNOS])
{
int indice;
for (indice=0; indice<MAX_ALUNOS; indice++)
{
printf("%d%s\n",indice+1,nome[indice]);
}
}
/*----------------------------------------------------------------------------*/
/* Pede o número do aluno e remove o aluno, reorganizando a lista de alunos */
/*----------------------------------------------------------------------------*/
void op_remover_aluno(int numero[], int *nalunos)
{
int num_aluno;
printf("Numero de aluno a remover = ");
scanf("%d", &num_aluno);
if (remover(num_aluno, numero[], *nalunos)==1)
printf("\n ALUNO REMOVIDO COM SUCESSO");
else
printf("\n ALUNO A REMOVER NAO EXISTE");
}
/*----------------------------------------------------------------------------*/
/* Remove um aluno dado o seu número. Retorna 1 se removeu, 0 caso contrário */
/*----------------------------------------------------------------------------*/
int remover(int aluno, int numero[], int *nalunos)
{
int indice;
/* pesquisa */
indice=0;
while ((indice<*nalunos) && (aluno != numero[indice]))
indice++;
/* remove se encontrou */
if (aluno == numero[indice])
{
shift_esquerda_alunos(indice, *nalunos, numero[], name[][MAX_ALUNOS]);
return 1;
}
else
return 0;
}
/*----------------------------------------------------------------------------*/
/* Desloca os registos dos alunos para a esquerda esmagando a posicao dada */
/*----------------------------------------------------------------------------*/
void shift_esquerda_alunos(int posicao, int *nalunos, int numero[], char name[][MAX_ALUNOS])
{
int indice;
if (*nalunos==0)
return;
for (indice=posicao; indice<*nalunos-1; indice++)
{
&numero[indice] = numero[indice+1];
strcpy(&name[indice],name[indice+1]);
}
*nalunos--;
}
/*----------------------------------------------------------------------------*/
/* Carrega a matriz de alunos a partir do ficheiro turno.txt */
/*----------------------------------------------------------------------------*/
void carregar_ficheiro(void)
{
FILE *fich;
char dummy;
if ((fich = fopen("turno.txt", "r")) == NULL) {
printf("\n\nERRO AO ABRIR FICHEIRO turno.txt\n");
return;
}
while (!feof(fich))
{
if(fscanf(fich,"%d", &numeros[nalunos])!=1)
break;
fscanf(fich,"%c", &dummy);
fgets(nomes[nalunos], MAX_NOME, fich);
/* martelada para remover o \n do fim de cada nome */
nomes[nalunos][strlen(nomes[nalunos])-1] = '\0';
printf("\n\t ALUNO %5d\t%s", numeros[nalunos], nomes[nalunos]);
nalunos++;
}
}
/*----------------------------------------------------------------------------*/
/* Guarda para o ficheiro os dados já trabalhados */
/*----------------------------------------------------------------------------*/
void guardar_ficheiro(int *nalunos int numero[])
{
FILE *fich;
int i;
/* ordenar_alunos(); */
if ((fich = fopen("turno.txt", "w")) == NULL) {
printf("\n\nERRO AO CRIAR FICHEIRO turno.txt\n");
return;
}
for(i=0; i<nalunos; i++)
fprintf(fich,"%5d %s\n", numeros, nomes);
fclose(fich);
}
/*----------------------------------------------------------------------------*/
/* Função principal */
/*----------------------------------------------------------------------------*/
void main(void)
{
int nalunos;
int numero[MAX_ALUNOS];
char nome[MAX_NOME][MAX_ALUNOS];
int opcao;
nalunos=0;
carregar_ficheiro();
do
{
menu();
scanf("%d",&opcao);
switch (opcao)
{
case 1: op_inscrever_aluno(&nalunos,numero,nome); break;
case 2: op_remover_aluno(&nalunos,numero); break;
case 3: op_listar_alunos(nalunos,numero,nome); break;
}
while(opcao!=0);
guardar_ficheiro();
}
}
Erros (GCC):
Exercício12.c: In function `op_remover_aluno':
Exercício12.c:56: error: parse error before ']' token
Exercício12.c: In function `remover':
Exercício12.c:77: error: parse error before ']' token
Exercício12.c: In function `shift_esquerda_alunos':
Exercício12.c:96: error: invalid lvalue in assignment
Exercício12.c:97: warning: passing arg 1 of `strcpy' from incompatible pointer type
Código (os erros estão identificados a vermelho):
#include <stdio.h>
#include <string.h>
#define MAX_ALUNOS 30
#define MAX_NOME 60
/*Estruturas de dados*/
/*char nome[MAX_ALUNOS][MAX_NOME]; para dentro do main*/
/*int numero[Max_Alunos]; para dentro do main*/
/*int nalunos; para dentro do main*/
/*----------------------------------------------------------------------------*/
/* PROTOTIPOS */
/*----------------------------------------------------------------------------*/
void op_inscrever_aluno(int *nalunos, int numero[], char nome[][MAX_ALUNOS]);
void op_listar_alunos(char nome[][MAX_ALUNOS]);
void op_remover_aluno(int numero[], int *nalunos);
int remover(int aluno, int numero[], int *nalunos);
void shift_esquerda_alunos(int posicao, int *nalunos, int numero[], char name[][MAX_ALUNOS]);
void carregar_ficheiro(void);
void guardar_ficheiro(void);
/*---------------------------------------------------*/
/* Inscreve um aluno, fornecidos o nome e o numero */
/*---------------------------------------------------*/
void inscrever_aluno(int *nalunos, int numero[], char nome[][MAX_ALUNOS])
{
fflush(stdin);
printf("Qual o nome do aluno?");
scanf("%s",nome[*nalunos]);
printf("Que numero deseja atribuir?");
scanf("%d",&numero[*nalunos]);
(*nalunos)++;
}
/*-------------------*/
/* Lista os alunos */
/*-------------------*/
void op_listar_alunos(char nome[][MAX_ALUNOS])
{
int indice;
for (indice=0; indice<MAX_ALUNOS; indice++)
{
printf("%d%s\n",indice+1,nome[indice]);
}
}
/*----------------------------------------------------------------------------*/
/* Pede o número do aluno e remove o aluno, reorganizando a lista de alunos */
/*----------------------------------------------------------------------------*/
void op_remover_aluno(int numero[], int *nalunos)
{
int num_aluno;
printf("Numero de aluno a remover = ");
scanf("%d", &num_aluno);
if (remover(num_aluno, numero[], *nalunos)==1)
printf("\n ALUNO REMOVIDO COM SUCESSO");
else
printf("\n ALUNO A REMOVER NAO EXISTE");
}
/*----------------------------------------------------------------------------*/
/* Remove um aluno dado o seu número. Retorna 1 se removeu, 0 caso contrário */
/*----------------------------------------------------------------------------*/
int remover(int aluno, int numero[], int *nalunos)
{
int indice;
/* pesquisa */
indice=0;
while ((indice<*nalunos) && (aluno != numero[indice]))
indice++;
/* remove se encontrou */
if (aluno == numero[indice])
{
shift_esquerda_alunos(indice, *nalunos, numero[], name[][MAX_ALUNOS]);
return 1;
}
else
return 0;
}
/*----------------------------------------------------------------------------*/
/* Desloca os registos dos alunos para a esquerda esmagando a posicao dada */
/*----------------------------------------------------------------------------*/
void shift_esquerda_alunos(int posicao, int *nalunos, int numero[], char name[][MAX_ALUNOS])
{
int indice;
if (*nalunos==0)
return;
for (indice=posicao; indice<*nalunos-1; indice++)
{
&numero[indice] = numero[indice+1];
strcpy(&name[indice],name[indice+1]);
}
*nalunos--;
}
/*----------------------------------------------------------------------------*/
/* Carrega a matriz de alunos a partir do ficheiro turno.txt */
/*----------------------------------------------------------------------------*/
void carregar_ficheiro(void)
{
FILE *fich;
char dummy;
if ((fich = fopen("turno.txt", "r")) == NULL) {
printf("\n\nERRO AO ABRIR FICHEIRO turno.txt\n");
return;
}
while (!feof(fich))
{
if(fscanf(fich,"%d", &numeros[nalunos])!=1)
break;
fscanf(fich,"%c", &dummy);
fgets(nomes[nalunos], MAX_NOME, fich);
/* martelada para remover o \n do fim de cada nome */
nomes[nalunos][strlen(nomes[nalunos])-1] = '\0';
printf("\n\t ALUNO %5d\t%s", numeros[nalunos], nomes[nalunos]);
nalunos++;
}
}
/*----------------------------------------------------------------------------*/
/* Guarda para o ficheiro os dados já trabalhados */
/*----------------------------------------------------------------------------*/
void guardar_ficheiro(int *nalunos int numero[])
{
FILE *fich;
int i;
/* ordenar_alunos(); */
if ((fich = fopen("turno.txt", "w")) == NULL) {
printf("\n\nERRO AO CRIAR FICHEIRO turno.txt\n");
return;
}
for(i=0; i<nalunos; i++)
fprintf(fich,"%5d %s\n", numeros, nomes);
fclose(fich);
}
/*----------------------------------------------------------------------------*/
/* Função principal */
/*----------------------------------------------------------------------------*/
void main(void)
{
int nalunos;
int numero[MAX_ALUNOS];
char nome[MAX_NOME][MAX_ALUNOS];
int opcao;
nalunos=0;
carregar_ficheiro();
do
{
menu();
scanf("%d",&opcao);
switch (opcao)
{
case 1: op_inscrever_aluno(&nalunos,numero,nome); break;
case 2: op_remover_aluno(&nalunos,numero); break;
case 3: op_listar_alunos(nalunos,numero,nome); break;
}
while(opcao!=0);
guardar_ficheiro();
}
}
Erros (GCC):
Exercício12.c: In function `op_remover_aluno':
Exercício12.c:56: error: parse error before ']' token
Exercício12.c: In function `remover':
Exercício12.c:77: error: parse error before ']' token
Exercício12.c: In function `shift_esquerda_alunos':
Exercício12.c:96: error: invalid lvalue in assignment
Exercício12.c:97: warning: passing arg 1 of `strcpy' from incompatible pointer type
Última edição: