Olá galera, nunca pedi ajuda aqui nesta área e também não sou muito ativo por aqui
Mas meu professor passou um programinha para fazer e eu não estou conseguindo fazer ele funcionar...
Aqui vai o enunciado(se bem que meu problema nem tem muito a ver com ele).
E meu humilde codigo:
[R]O problema que eu estou tendo é, que toda vez que eu encerro o laço, a coluna está voltando para a inicial ao invés de continuar em sequência com as outras, não sei o que estou errando e gostaria muito que alguém pudesse me dar uma luz nisso aqui
PS:Os ''cases'' estão vazios alguns porque ainda não tive como colocar essas funções devido a primeira não estar funcionando [/R]corretamente
Update:
Resolvi ESSE problema, agora como de praxe apareceu um outro....
O problema acho que está com o default, se eu digito um numero invalido, ele funciona normalmente e retorna que é invalido e pede para digitar novamente, agora se eu digito uma letra, ele entra em loop infinito.
Mas meu professor passou um programinha para fazer e eu não estou conseguindo fazer ele funcionar...
Aqui vai o enunciado(se bem que meu problema nem tem muito a ver com ele).
04) Faça um programa que apresente o seguinte menu para o usuário: Controle de Notas
==============
<1> - Adicionar notas de um aluno
<2> - Listar todas as notas e médias
<3> - Listar a maior nota na prova 1 e na prova 2
<4> - Sair
Qual opção escolhida?
O usuário poderá entrar no máximo com as notas de 30 alunos. Para isto crie uma matriz de reais de duas colunas, onde cada uma armazenará a nota de uma prova. Na opção 1 o usuário entrará com as duas notas de um aluno. Caso o usuário tente executar as opções 2 ou 3 e não exista nenhuma nota cadastrada mostre uma mensagem de alerta. Caso o usuário tente cadastrar os dados de um novo aluno e não exista mais espaço na matriz de uma mensagem de erro. Na opção 2 liste em formato de tabela as notas e médias de todos os alunos. Na opção 3 apresente a maior nota da prova 1 e da prova 2 cadastradas. Caso o usuário escolha a opção 4 use a função exit(int) para encerrar o programa. Caso escolha uma opção inválida de uma mensagem de erro e retorne ao menu. As opções de 1 a 3 devem chamar funções especificas para realizar as atividades propostas, passando-se a matriz com parâmetro. Utilize a estrutura switch com break, e a do/while para fazer o menu, e constantes para controlar os limites da matriz.
E meu humilde codigo:
C:
# include <stdio.h>
# define qntalunos 3
void adnota(float nota[2][qntalunos], int*contcoluna){
int contlinha=0;
if(*contcoluna<qntalunos)
{
printf("Digite a primeira nota do aluno %d:", *contcoluna+1);
scanf("%f", ¬a[contlinha][*contcoluna]);
contlinha++;
printf("Digite a segunda nota do aluno %d:",*contcoluna+1);
scanf("%f", ¬a[contlinha][*contcoluna]);
}
else{
printf("Sem espaço no vetor\n");
}
*contcoluna++;
}
void listanota(float nota[2][qntalunos])
{
int contlinha=0, contcoluna=0;
for(contcoluna=0; contcoluna<qntalunos;contcoluna++){
printf("\n\nAluno: %d Nota P1: %.2f Nota P2: %.2f \n", contcoluna, nota[0][contcoluna], nota[1][contcoluna]);
}
}
main(){
int opcao, contcoluna=0;
float nota[2][qntalunos];
printf("\t\t\tControle de notas\n");
printf("\t\t\t-----------------\n");
printf("\t<1>-Adiciona notas para um aluno\n");
printf("\t<2>-Lista todas as notas e medias\n");
printf("\t<3>-Lista a maior nota na prova 1 e na prova 2 \n");
printf("\t<4>-Sai do programa.\n");
do{
printf("O valor da coluna eh:%d\n", contcoluna);
printf("\tDigite a opcao desejada:");
scanf("%d",&opcao);
switch(opcao){
case 1:
{
adnota(nota, &contcoluna);
break;
}
case 2:
{
listanota(nota);
break;
}
case 3:
{
break;
}
case 4:
{
break;
}
}
}while(opcao !=4);
}
PS:Os ''cases'' estão vazios alguns porque ainda não tive como colocar essas funções devido a primeira não estar funcionando [/R]corretamente
Update:
Resolvi ESSE problema, agora como de praxe apareceu um outro....
C:
# include <stdio.h>
# define qntalunos 3
int adnota(float nota[2][qntalunos], int*contcoluna){
int contlinha=0;
if(*contcoluna<qntalunos)
{
printf("Digite a primeira nota do aluno %d:", *contcoluna+1);
scanf("%f", ¬a[contlinha][*contcoluna]);
contlinha++;
printf("Digite a segunda nota do aluno %d:",*contcoluna+1);
scanf("%f", ¬a[contlinha][*contcoluna]);
return 1;
}
else{
printf("Sem espaco no vetor\n");
return 0;
}
}
void listanota(float nota[2][qntalunos],int contcoluna)
{
int contlinha=0,contaux;
for(contaux=0; contaux<contcoluna;contaux++){
printf("\nAluno: %d Nota P1: %.2f Nota P2: %.2f Media :%.2f \n", contaux+1, nota[0][contaux], nota[1][contaux], (nota[0][contaux]+ nota[1][contaux])/2);
}
}
void listamaioresnotas(float nota[2][qntalunos])
{
}
main(){
int contcoluna=0;
int opcao;
float nota[2][qntalunos];
printf("\t\t\tControle de notas\n");
printf("\t\t\t-----------------\n");
printf("\t<1>-Adiciona notas para um aluno\n");
printf("\t<2>-Lista todas as notas e medias\n");
printf("\t<3>-Lista a maior nota na prova 1 e na prova 2 \n");
printf("\t<4>-Sai do programa.\n");
do{
printf("\tDigite a opcao desejada:");
scanf("%d",&opcao);
switch(opcao){
case 1:
{
if(adnota(nota, &contcoluna))
contcoluna++;
else{
contcoluna+=0;
}
opcao=0;
break;
}
case 2:
{
listanota(nota,contcoluna);
opcao=0;
break;
}
case 3:
{
listamaioresnotas(nota);
break;
}
case 4:
{
printf("Fim do programa!\n");
opcao=0;
break;
}
default:
{
printf("Opcao invalida!\n");
break;
}
}
}while(opcao !=4);
}
O problema acho que está com o default, se eu digito um numero invalido, ele funciona normalmente e retorna que é invalido e pede para digitar novamente, agora se eu digito uma letra, ele entra em loop infinito.
Última edição: