Hola, soy programador autodidacta y en resumidas cuentas empecé con C hace mas o menos dos meses y venia utilizando gets() y fflush() siempre que quería utilizar cadenas, el problema es que ahora estaba haciendo un pequeño programa para repasar memoria dinámica y estaba teniendo un error muy raro (mas adelante dejare el código), por azar entre en una pagina de C en la que se aseveraban unos cuantos errores de principiantes, resulta que aparentemente gets() es bastante pernicioso para el desempeño del programa y no es muy funcional que digamos, y recomendaban el uso de fgets()...
Por otro lado, queria preguntar si es mas recomendable usar variables globales que locales, en lo personal siempre utilizo globales ( a menos que se traten de iteradores en funciones), mi hermano esta en la universidad estudiando ingeniería informática y me sirve de mucho apoyo a veces, pero he de decir que es hasta contradictorio que en algunas ocasiones tienda a darme información falsa o simplemente no sabe de lo que habla, me preocupa bastante que ni siquiera yendo a la universidad si pueda encontrar información veraz ( si se lo pregunta mi hermano tiene muy buenas calificaciones, cosa que claro me preocupa aun mas), pero para reducirlo todo un poco, necesito información veraz :-).
Aquí dejo el código para ver si el error tiene en realidad relacion con el uso de gets() o no...
#include<stdlib.h>
#include<string.h>
// variables
char **num;
int i,cadenas=0;
char eleccion[2];
char **string;
char cadena1[2][30];
// prototipos
void menu_inicio();
void guardar();
void mostrar();
void registar(char **arreglo, int cadenas);
int main (){
menu_inicio();
return 0;
}
void registrar(char **arreglo, int cadenas){
char **pivote;
int i=0;
pivote = (char **) calloc(cadenas,sizeof(char *));
for(i=0;i<cadenas;i++){
pivote[i] = (char *) calloc(30,1 );
}
for(i=0;i<cadenas;i++){
strcpy(pivote[i], arreglo[i]);
}
delete arreglo;
arreglo = (char **) calloc(cadenas+1,sizeof(char *));
for(i=0;i<cadenas+1;i++){
arreglo[i] = (char *) calloc(30,1 );
}
for(i=0;i<cadenas;i++){
strcpy(arreglo[i], pivote[i]);
}
delete pivote;
}
void menu_inicio(){
system("cls");
printf("\n\n\t\tIntroduce tu eleccion...\n\n\t\t");
printf("a) Registrar cadenas\n\t\tb) Ver cadenas registradas\n\t\tc) Salir\n\t\t\t\t\t\t%c%c>> ",205,205);;fflush(stdin);gets (eleccion);
if (eleccion[0]==97){
guardar();
}
else{
if(eleccion[0]==98){
mostrar();
}
else{
if(eleccion[0]==99){
exit(-1);
}
}
}
}
void guardar(){
system("cls");
if(cadenas>0){
system("cls");
registrar(string,cadenas);
cadenas++;
printf("\n\n\t\tIntroduce tu cadena: ");fflush(stdin);gets(string[cadenas-1]);
system("cls");
printf("\n\n\t\tAhora que deseas hacer?...\n\n\t");
printf("a) Volver al menu\n\tb) Ver cadenas\n\tc) Seguir Guardando\n\td) Salir\n\t\t\t\t\t\t\t\t%c%c>> ",205,205);fflush(stdin);gets (eleccion);
if(eleccion[0]==97){
menu_inicio();
}
else{
if(eleccion[0]==98){
mostrar();
}
else{
if(eleccion[0]==99){
guardar();
}
else{
if(eleccion[0] == 100){
exit(-1);
}
}
}
}
}
else{
string = (char **) malloc(sizeof(char *));
*(string) = (char *) calloc(30,1);
cadenas++;
printf("\n\n\t\tIntroduce tu cadena: ");fflush(stdin);fflush(stdin);gets (string[0]);
system("cls");
printf("\n\n\t\tAhora que deseas hacer?...\n\n\t");
printf("a) Volver al menu\n\tb) Ver cadenas\n\tc) Seguir Guardando\n\td) Salir\n\t\t\t\t\t\t\t\t%c%c>> ",205,205);fflush(stdin);gets (eleccion);
if(eleccion[0]==97){
menu_inicio();
}
else{
if(eleccion[0]==98){
mostrar();
}
else{
if(eleccion[0]==99){
guardar();
}
else{
if(eleccion[0] == 100){
exit(-1);
}
}
}
}
}
}
void mostrar(){
int i=0;
system("cls");
printf("\n\n\t\t");
for(i=0;i<cadenas;i++){
printf("Cadena %i %c%c>> %s\n\t\t",i+1,205,205,string[i]);
}
printf("\n\n\t\t\t\t\t\tPulse enter para continuar... ");getchar();
system("cls");
printf("\n\n\t\tAhora que deseas hacer?...\n\n\t");
printf("a) Volver al menu\n\tb) Volver a ver cadenas\n\tc) Salir\n\t\t\t\t\t\t\t\t%c%c>> ",205,205);fflush(stdin);gets (eleccion);
if(eleccion[0]==97){
menu_inicio();
}
else{
if(eleccion[0]==98){
mostrar();
}
else{
if(eleccion[0]==99){
exit(-1);
}
}
}
}```