Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Vacka_96

#1
Programación C/C++ / Problema leer char *
1 Noviembre 2016, 05:55 AM
Que tal, estoy haciendo un programa y me surge un problema, lo que pasa es que a la hora de leer mi variable char* no la esta aceptando.....
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

struct Alumno{
   char *nombre;
   int matricula;
   int id_Materias[4];
};

int matricula = 1;

typedef struct Alumno ALUMNO;

int validate(char *opcion, int op); //Opcion 1 Valida digitos, Opcion 2 Valida chars
void add_Alumno(ALUMNO *);
void print_Alumno(ALUMNO *);

int main(){
   ALUMNO alumno;
   add_Alumno(&alumno);
   print_Alumno(&alumno);
   system("pause");
   return 0;
}

void add_Alumno(ALUMNO *alumno){
   int pass = 0;
   char *opcion;
   int flag = 0;
   int i = 0;
   int cont_Materias = 0;
   for(i=0; i<6; i++){
       alumno->id_Materias[i] = 0;
   }
   do{
       system("cls");
       printf("\n\n\tIngrese el nombre del alumno: ");
       fflush(stdin);
       scanf(" %[^\n]", &(*opcion));
       pass = validate(opcion, 2);
   }while(pass != 1);
   printf("flag1");
   alumno->nombre = opcion;
   printf("flag2");
   system("cls");
   printf("\n\n\tLa matricula del alumno es: %08d",matricula);
   system("pause");
   alumno->matricula = matricula;
   system("cls");
   do{
       do{
           do{
               system("cls");
               printf("\n\n\t***** MATERIAS *****");
               printf("\n\n\t1. MATEMATICAS");
               printf("\n\t2. ESPANIOL");
               printf("\n\t3. PROGRAMACION");
               printf("\n\t4. ARTES");
               printf("\n\t5. CULTURA DE CALIDAD");
               printf("\n\t6. CALCULO");
               printf("\n\n\tIngrese el id de la materia: ");
               scanf(" %[^\n]", &(*opcion));
               pass = validate(opcion, 1);
           }while(pass != 1);
           pass = atoi(opcion);
       }while(pass<1 || pass>6);
       flag = 0;
       for(i=0; i<6; i++){
           printf("\n\tMateria: %d", alumno->id_Materias);
           system("pause");
           if(alumno->id_Materias[i] == pass){
               flag = 1;
               break;
           }
       }
       if(flag != 1)
           alumno->id_Materias[cont_Materias] = pass;
   }while(flag != 1);


}

void set_Name_Alumno(ALUMNO *alumno){
   printf("\n\tSu nombre actual es: ");
   print_Alumno(alumno);
   system("pause");
   int pass = 0;
   char *opcion;
   do{
       system("cls");
       printf("\n\tIngrese su nuevo nombre: ");
       fflush(stdin);
       scanf(" %[^\n]", &(*opcion));
       pass = validate(opcion, 2);
   }while(pass != 1);
   alumno->nombre = opcion;
}

void print_Alumno(ALUMNO *alumno){
   printf("\n\tNombre: %s", alumno->nombre);
   printf("\n\tMatricula: %08d", alumno->matricula);
}

int validate(char *opcion, int op){
   int i = 0;
   for(i=0; i<strlen(opcion); i++){
       if(!isdigit(opcion[i]) && op == 1){
           return 0;
       }
       if(!isalpha(opcion[i]) && op == 2 && !(opcion[i] == ' ')){
           return 0;
       }
   }
   return 1;
}



Mod: Los códigos deben ir en etiquetas GeSHi