Não consigo resolver dois problemas nesse trabalho.

1. Não consigo resolver dois problemas nesse trabalho.

Antonio Lorival Baesso
4n7onio

(usa Nenhuma)

Enviado em 08/06/2017 - 13:38h

1º ) Problema e que eu preciso que as notas sejam alteradas no menu de alteração(case d).
2º ) Preciso criar uma mensagem que pergunte ao usuário se deseja ou não continuar cadastrando alunos ate o limite proposto no case a.

o programa:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main(void)
{
setlocale(LC_ALL, "Portuguese");
printf("\t\t\t\tJosephine v 0.510.n\n");
char menu_1[100]="Escolha uma dessa opções abaixo\n[A] Cadastro de dados\n";
char menu_2[100]="[B] Cadastro de alunos e notas\n[C] Listagem de dados e notas\n[D] Alterar dados\n";
char menu_3[100]="[1] Limpar dados\n[0] Sair do menu\n";
char opcao;
float aux;
unsigned int notas, alunos;
int controle=0;
int editar=0,escolha;
do{
printf("%s",menu_1);
if(controle==1){
printf("%s",menu_2);
};
printf("%s",menu_3);

scanf(" %s",&opcao);
if(opcao=='a'){
system("clear");
printf("Quantidade de alunos\n");
scanf(" %d",&alunos);
printf("Quantidade de notas\n");
scanf(" %d",&notas);
controle=1;
};
char nome[alunos][21], auxc[21];
float matriz[alunos][notas], resultado[alunos];
system("clear");
switch(opcao){
case 'b':
for(int i=0;i<alunos;i++){
system("clear");
printf("Digite o nome do %d aluno: ",i+1);
scanf(" %[A-Za-z0-9 ]s", &nome[i][0]);
system("clear");
for(int j=0;j<notas;j++){
printf("Digite a nota do aluno %s:",nome[i]);
do{
scanf("%f",&matriz[i][j]);
system("clear");
}while(matriz[i][j]>10);
resultado[i]+=matriz[i][j];
}
resultado[i] /= notas;
system("clear");
};
system("clear");
break;
case 'c':
system("clear");
printf("[A] sem oredenar\n");
printf("[B] Ordem crescente\n");
printf("[C] Ordem descrecente\n");
char opcao_2; scanf(" %s",&opcao_2);
switch(opcao_2){
case 'a':
for(int i=0;i<alunos;i++){
printf("%s : %.2f\n",nome[i], resultado[i]);
};
break;
case 'b':
for(int i=alunos-1;i>=0;i--){
for(int j=i;j>=0;j--){
if(resultado[i]>resultado[j]){
aux=resultado[i];
resultado[i]=resultado[j];
resultado[j]=aux;
strcpy(auxc,nome[i]);
strcpy(nome[i],nome[j]);
strcpy(nome[j],nome[i]);
}
}
}
for(int i=0;i<alunos;i++){
printf("%s : %.2f\n",nome[i], resultado[i]);
};
break;
case 'c':
if(controle==2)
for(int i=0;i<=alunos;i++){
for(int j=i+1;j<alunos;j++){
if(resultado[i]<resultado[j]){
aux=resultado[i];
resultado[i]=resultado[j];
resultado[j]=aux;
strcpy(auxc,nome[i]);
strcpy(nome[i],nome[j]);
strcpy(nome[j],auxc);
}
}
}
for(int i=0;i<alunos;i++){
printf("%s : %.2f\n",nome[i], resultado[i]);
};
}

break;
case 'd':
editar=0;
for(int i=0;i<alunos;i++){
printf("%d - %s\n",editar+=1,nome[i]);
};
printf("Qual deseja altera, digite o numero da opção\n");
do{
scanf(" %d",&escolha);
}while(escolha>alunos);
printf("Alteração do %s\n",nome[escolha-1]);
printf("[A] Alterar nome\n");
printf("[B]Alterar nota\n");
char opcao_3; scanf(" %c",&opcao_3);
switch(opcao_3){
case 'a':
printf("Alterar nome\n");
scanf(" %[A-Za-z0-9 ]s", &nome[escolha-1][0]);
break;
case 'b':
printf("Alterar nota\n");
for(int i=0; i<notas;i++){
scanf(" %f",&matriz[escolha-1][i]);
};
}
break;
case '1':
printf("Tudo limpo\n");
for(int i=0;i<alunos;i++){
for(int j=0;j<notas;j++){
matriz[i][j]=resultado[i]=0;
nome[i][0]='0';
}
system("clear");
}
opcao=opcao_2=opcao_3='n';
notas=alunos=controle=editar=escolha=0;
break;
case '0':
exit(0);
};
}while(opcao!='0');
return 0;
}


Desde já agradeço, estou apenas na primeira fase me de um desconto por favor.


  


2. Re: Não consigo resolver dois problemas nesse trabalho.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/06/2017 - 17:17h

Prezado Antônio,

No outro tópico que você criou a respeito desse mesmo programa, eu fiz algumas sugestões que ainda podem lhe ajudar. Em especial, um contador separado para a quantidade de alunos já cadastrados com sucesso pode ser muito útil caso você decida interromper a leitura de alunos antes de chegar ao número máximo de alunos.

Mas seria bom você prestar atenção também ao que eu disse sobre você não inicializar os valores de resultado no momento em que esse array é declarado (na prática, ele vai ficar com valores iniciais indefinidos). Mais ainda: você continua com erros ao usar scanf(), principalmente ao ler strings. Seria bom você os corrigir.

Quanto à parte de alteração de notas, eu vi que você implementou algo que, olhando por alto, parece correto. Por que acha que não está funcionando? Que erros está recebendo?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts