Hola, acabo de recibir mi nota del primer parcial de programación II, y tuve un error muy boludo, ahora que lo entiendo.
No me funcionaba el gets en el siguiente código: (en C):
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void textocrea();
void textolee();
int main() {
//char text [1000];
//char entrada [1000];
int opcion = 0;
printf("Seleccione la opcion:\n");
printf("Opcion 1) crear texto en archivo\nOpcion 2) Leer archivo\n");
scanf("%i", &opcion);
switch(opcion){
case 1:
textocrea();
break;
case 2://funciona!!!
textolee();
break;
default:
printf("Selecciono una opcion no existente\n");
break;
}
return 0;
}
void textocrea()
{
FILE *vfile;
char caracter[1000];
vfile = fopen("d:/texto.txt", "w");
if(vfile==NULL){
printf("Error al crear archivo\n");
}
printf("Ingrese el texto\n");
gets(caracter);
fputs(caracter, vfile);
fclose(vfile);
}
void textolee()
{
FILE *vfile;
char caracter [1000];
vfile = fopen("d:/texto.txt", "r");
if(vfile==NULL){
printf("Error al crear archivo\n");
}
while(!feof(vfile)){
fread(&caracter, sizeof(caracter), 1, vfile);
printf("%s", caracter);
}
fclose(vfile);
}
Entonces lo resolví poniendo un scanf, pero como sabemos el scanf no lee espacios, y si uno quiere guardar un texto tiene que leer espacios. para esto usé la fórmula:
scanf( " %[^\n]",&caracter );
para que guarde en la variable caracter el texto. Pero no era lo que el profe quería. La respuesta para que funcione el gets es así:
fflush(stdin);
gets(caracter);
Y el código completo que tiene dos opciones, una crear un archivo y la otra leerlo, sería así (sin errores):
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void textocrea();
void textolee();
int main() {
//char text [1000];
//char entrada [1000];
int opcion = 0;
printf("Seleccione la opcion:\n");
printf("Opcion 1) crear texto en archivo\nOpcion 2) Leer archivo\n");
scanf("%i", &opcion);
switch(opcion){
case 1:
textocrea();
break;
case 2://funciona!!!
textolee();
break;
default:
printf("Selecciono una opcion no existente\n");
break;
}
return 0;
}
void textocrea()
{
FILE *vfile;
char caracter[1000];
vfile = fopen("d:/texto.txt", "w");
if(vfile==NULL){
printf("Error al crear archivo\n");
}
printf("Ingrese el texto\n");
fflush(stdin);
gets(caracter);
fputs(caracter, vfile);
fclose(vfile);
}
void textolee()
{
FILE *vfile;
char caracter [1000];
vfile = fopen("d:/texto.txt", "r");
if(vfile==NULL){
printf("Error al crear archivo\n");
}
while(!feof(vfile)){
fread(&caracter, sizeof(caracter), 1, vfile);
printf("%s", caracter);
}
fclose(vfile);
}
Y si quieren que quede mejor le ponen un system("pause"); para que no se cierre si lo ejecutan individualmente.
Eso es todo, quería compartir esto para que no cometan este error tan bolu, ojalá nunca les pase...
Saludos...