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.....
Mod: Los códigos deben ir en etiquetas GeSHi
Código (c) [Seleccionar]
#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