Pessoal estou com dificuldades com esses códigos em c estou aprendendo agora, só consigo registra um

1. Pessoal estou com dificuldades com esses códigos em c estou aprendendo agora, só consigo registra um

Celso Sousa
Celso_Sousa

(usa Outra)

Enviado em 26/08/2016 - 16:02h

#include <stdio.h>
#include <stdlib.h>
#define Max 5

typedef struct Reg {

char nome[30];
int nota1;
int nota2;
int nota3;
}Reg;

int cont=1;
struct Reg r[MAX];
char nome[30];
void Inserir(void) {
int op;

do{
printf("Digite o nome do aluno: ");
scanf("\n%s",r[cont].nome);
printf("\nA 1° nota: ");
scanf("\n%i", &r[cont].nota1);
printf("A 2° nota: ");
scanf("\n%i", &r[cont].nota2);
printf("A 3° nota: ");
scanf("\n%i", &r[cont].nota3);
cont++;
printf("Digite 1 para sair enter par continuar");
scanf("%i",&op);
}while(op!=1);
system("pause");
}

void pesquisa(void) {
for(register int i=0; i<=cont;i++) {

printf("\nBoletim..........: %i°\n",i+1);
printf("\nAluno............: %s\n", r[i].nome);
printf("\n1° nota..........: %i\n", r[i].nota1);
printf("\n2° nota..........: %i\n", r[i].nota2);
printf("\n3° nota..........: %i\n", r[i].nota3);

}
}


int main(void) {
int opcao=0;

do{
printf("1. Adicionar\n");
printf("2. Pesquisar\n");
scanf("%i", &opcao);

switch(opcao) {
case 1: printf("\e[H\e[2J");
system("cls");
Inserir();
break;
case 2: printf("\e[H\e[2J");
system("cls");
pesquisa();
break;
default: printf("\e[H\e[2J");
printf("\n\nOpcao Invalida!");
exit(1);
break;}
}while(opcao>=1);
return 0;
}




  


2. Re: Pessoal estou com dificuldades com esses códigos em c estou aprendendo agora, só consigo registr

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/08/2016 - 17:09h

Ian Sousa escreveu:

            printf("Digite 1 para sair enter par continuar");
scanf("%i",&op);


Assim como a maioria das conversões de scanf(), “%i” ignora qualquer quantidade espaços em branco (incluindo quebras de linha). Assim sendo, “1 para sair [ou] enter para continuar” acaba não sendo uma escolha válida. Seria melhor você usar algo como “1 para novo registro ou 2 para encerrar”, e ajustar o resto do programa de acordo.

Mas há outros problemas no seu código:

1) Começar com cont=1 faz com que você pule o primeiro índice do array r (lembrando que um array declarado com dimensão N tem índices que vão de 0 a N-1).

2) Ao pedir o nome do aluno, você usou a conversão “%s”. Cuidado com isso, porque além de não limitar o tamanho máximo da string que o usuário pode digitar (possibilitando que strings muito longas (maiores de 29 caracteres, no seu caso) provoquem memory overrun), os nomes também não poderão conter espaços.

3) system("pause") é uma abominação. Se você acha que ele é necessário no seu programa, então você fez alguma coisa errada.

4) system("cls") é outra coisa medonha, assim como também o é printf("\e[H\e[2J"). Se você realmente sentir necessidade de limpar a tela no seu programa, veja o código mostrado na mensagem nº 12 do seguinte tópico discutido aqui na comunidade: https://www.vivaolinux.com.br/topico/C-C++/Preciso-fazer-um-programa-em-C-para-cadastra-alunos-consu....

5) Usar register explicitamente é uma coisa meio obsoleta, e muitos compiladores hoje em dia ignoram esse uso, porque preferem suas próprias heurísticas para identificar oportunidades de otimização de código (e elas geralmente funcionam mesmo melhor do que nossas tentativas de otimização manual). O fato de você chamar uma função externa, e especialmente uma com a complexidade de printf(), certamente inviabiliza mesmo a possibilidade de usar register.


3. printf("Digite 1 para sair outra tecla para continuar"); scanf("%i",&op);

Celso Sousa
Celso_Sousa

(usa Outra)

Enviado em 26/08/2016 - 17:35h

paulo1205 escreveu:

Ian Sousa escreveu:

            printf("Digite 1 para sair enter par continuar");
scanf("%i",&op);


Assim como a maioria das conversões de scanf(), “%i” ignora qualquer quantidade espaços em branco (incluindo quebras de linha). Assim sendo, “1 para sair [ou] enter para continuar” acaba não sendo uma escolha válida. Seria melhor você usar algo como “1 para novo registro ou 2 para encerrar”, e ajustar o resto do programa de acordo.

Mas há outros problemas no seu código.





4. Re: Pessoal estou com dificuldades com esses códigos em c estou aprendendo agora, só consigo registra um

Celso Sousa
Celso_Sousa

(usa Outra)

Enviado em 26/08/2016 - 17:39h

Valeu cara você é nota dez!


5. Re: Pessoal estou com dificuldades com esses códigos em c estou aprendendo agora, só consigo registr

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/08/2016 - 18:01h

Editei a resposta acima para apontar com mais clareza os outros problema que identifiquei no seu programa. Recomendo que você dê uma nova olhada.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts