Ir ao conteúdo
  • Cadastre-se
Igor Vargas

C erro após digitar no scanf

Recommended Posts

Estou com  um problema onde da erro depois que eu digito algo no  scanf("%d",&al[y].l_Disciplinas) e fecha  o programa.

 


 struct disciplinas
    {
    int codigo;
    char professor[20];
    int c_Horaria;
    char h_Semanal[30];
	
	
    };

    struct registro
    {        
    int matricula;
    char nome[20];
    char sobrenome[20];
    char email[40];
    int l_Disciplinas; 
	int grade[4][6];
    };



void add_Aluno(struct registro al[3], struct disciplinas add_Dis[5]){
    struct registro grade_T[4][6];
    int dis,x,y,guarda[5],cont=0,num;
    char resp;
    int volta,j;
    printf("\n\n");
    printf("--------------------------------------\n");
    printf("---voce selecionou adicionar aluno.---\n");
    printf("--------------------------------------\n");
    printf("    Lista de Disciplinas\n");
    printf("    Codigo    Nome\n\n");
    printf("\n");
      
      
       
           int passa;
    do{
        int yy=1;
        printf("Digite seu nome:");
        fflush(stdin);                                                //Funcão de Cadastro do aluno
        gets(al[cont].nome);
        printf("Digite seu Sobrenome:");
        gets(al[cont].sobrenome);
        strcat(al[cont].nome, al[cont].sobrenome);
        printf("Digite sua Matricula:");
        scanf("%d",&al[cont].matricula);
        printf("Digite seu e-mail:");
        fflush(stdin);
        gets(al[cont].email);
        cont++;
        do{
        volta=1;    
        printf("Digite em quantas materias deseja se matricular:");
        scanf("%d",&num);    
        printf("Digite o codigo das diciplinas que voce deseja se matricular\n");    
        for(y=0; y<num; y++){
        	fflush(stdin);
        scanf("%d",&al[y].l_Disciplinas);
		}
		for(x=0; x<4; x++){	
		 for(y=0; y<6; y++){
	if(al[x].l_Disciplinas== 122)
	{
	grade_T[0][1].grade[x][y]=add_Dis[x].codigo;
	grade_T[1][2].grade[x][y]=add_Dis[x].codigo;
	}		 
	else if(al[x].l_Disciplinas== 127){
	
	grade_T[2][2].grade[x][y]=add_Dis[x].codigo;
	grade_T[3][2].grade[x][y]=add_Dis[x].codigo;
	}	 
	else if(al[x].l_Disciplinas== 132){
	
	grade_T[2][2].grade[4][4]=add_Dis[x].codigo;
	grade_T[1][4].grade[5][5]=add_Dis[x].codigo;
    
	}		 
	else if(al[x].l_Disciplinas== 143)
	{
	
	grade_T[0][5].grade[x][y]=add_Dis[x].codigo;
   	}	 
	else if(al[x].l_Disciplinas== 135)
	{
	grade_T[1][3].grade[x][y]=add_Dis[x].codigo;
	grade_T[0][5].grade[x][y]=add_Dis[x].codigo;	
	}
	strcpy(grade_T[0][0].grade[x][y],add_Dis[x].h_Semanal);
    strcpy(grade_T[1][0].grade[x][y],add_Dis[x].h_Semanal);
	strcpy(grade_T[2][0].grade[x][y],add_Dis[x].h_Semanal);
    strcpy(grade_T[3][0].grade[x][y],add_Dis[x].h_Semanal);	
			 
}
		 }for(x=0; x<num; x++){
		for(j=0;j<num;j++){	
        if((al[x].l_Disciplinas == 127 && al[j].l_Disciplinas == 132 && j != x )|| al[x].l_Disciplinas ==135 && al[j].l_Disciplinas == 143)
    {
        printf("voce não pode se inscrever em duas disciplas de mesmo horario\n");
        volta=0;
        al[y].l_Disciplinas=0;
        break;
    }
	}
}

}while(volta != 1 ); 
    printf("Deseja Cadastrar outro aluno? s/n:");
    fflush(stdin);
    scanf("%c",&resp);
}while(resp != 'n');      
 
        }

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Vargas    ele está com erro não é no scanf ,  é no strcpy , pois strcpy não funciona para copiar um  struct inteira mas apenas a variável char dentro dela ,  então essa parte do seu código ficaria assim  :

#include <stdio.h>
struct disciplinas{
    int codigo;
    char professor[20];
    int c_Horaria;
    char h_Semanal[30];
};
struct registro{
    int matricula;
    char nome[20];
    char sobrenome[20];
    char email[40];
    int l_Disciplinas;
	int grade[4][6];
};
void add_Aluno(struct registro al[23], struct disciplinas add_Dis[35]){
    struct registro grade_T[41][68];
    int dis,x,y,guarda[5],cont=0,num;
    char resp;
    int volta,j;

    strcpy(add_Dis[0].h_Semanal , "qualquer coisa");/* atribuindo uma string a essa variável char na posição zero*/
    for(j=1;j<4;j++)
        strcpy(add_Dis[j].h_Semanal , "Outra Coisa qualquer");/* atribuindo outra string a essa variável char nas outras posições */

    printf("\n\n");
    printf("--------------------------------------\n");
    printf("---voce selecionou adicionar aluno.---\n");
    printf("--------------------------------------\n");
    printf("    Lista de Disciplinas\n");
    printf("    Codigo    Nome\n\n");
    printf("\n");
    int passa;
    do{
        int yy=1;
        printf("Digite seu nome:");
        fflush(stdin);                                                /*//Funcão de Cadastro do aluno*/
        gets(al[cont].nome);
        printf("Digite seu Sobrenome:");
        gets(al[cont].sobrenome);
        strcat(al[cont].nome, al[cont].sobrenome);
        printf("Digite sua Matricula:");
        scanf("%d",&al[cont].matricula);
        printf("Digite seu e-mail:");
        fflush(stdin);
        gets(al[cont].email);
        cont++;
        do{
            volta=1;
            printf("Digite em quantas materias deseja se matricular:");
            scanf("%d",&num);
            printf("Digite o codigo das diciplinas que voce deseja se matricular\n");
            for(y=0; y<num; y++){
        	    fflush(stdin);
                scanf("%d",&al[y].l_Disciplinas);
		    }
		    for(x=0; x<4; x++){
                for(y=0; y<6; y++){

                    grade_T[x][y].grade[x][y] = add_Dis[0].h_Semanal;/*  atribuindo a mesma string a todas as posições */

	                if(al[x].l_Disciplinas== 122){
	                    grade_T[0][1].grade[x][y]=add_Dis[x].codigo;
                        grade_T[1][2].grade[x][y]=add_Dis[x].codigo;
                    }
                    else
                        if(al[x].l_Disciplinas== 127){
                            grade_T[2][2].grade[x][y]=add_Dis[x].codigo;
                            grade_T[3][2].grade[x][y]=add_Dis[x].codigo;
                        }
                        else
                            if(al[x].l_Disciplinas== 132){
                                grade_T[2][2].grade[4][4]=add_Dis[x].codigo;
                                grade_T[1][4].grade[5][5]=add_Dis[x].codigo;
                            }
                            else
                                if(al[x].l_Disciplinas== 143){
                                    grade_T[0][5].grade[x][y]=add_Dis[x].codigo;
                                }
                                else
                                    if(al[x].l_Disciplinas== 135){
                                        grade_T[1][3].grade[x][y]=add_Dis[x].codigo;
                                        grade_T[0][5].grade[x][y]=add_Dis[x].codigo;
                                    }
                                    grade_T[0][0].grade[x][y] = add_Dis[x].h_Semanal;/* erro strdpy não funciona assim */
                                    grade_T[1][0].grade[x][y] = add_Dis[x].h_Semanal;
                                    grade_T[2][0].grade[x][y] = add_Dis[x].h_Semanal;
                                    grade_T[3][0].grade[x][y] = add_Dis[x].h_Semanal;
                                    printf("A String Na Grade_T = %s\n",grade_T[3][0].grade[x][y]);
                }
            }
            for(x=0; x<num; x++){
                for(j=0;j<num;j++){
                    if((al[x].l_Disciplinas == 127 && al[j].l_Disciplinas == 132 && j != x )|| al[x].l_Disciplinas ==135 && al[j].l_Disciplinas == 143){
                        printf("voce não pode se inscrever em duas disciplas de mesmo horario\n");
                        volta=0;
                        al[y].l_Disciplinas=0;
                        break;
                    }
                }
            }
        }while(volta != 1 );
        printf("Deseja Cadastrar outro aluno? s/n:");
        fflush(stdin);
        scanf("%c",&resp);
    }while(resp != 'n');
}

int main(){
    struct registro registro[10];
    struct disciplinas disciplinas[10];
    add_Aluno(registro,disciplinas);
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×