Hola veran estaba haciendo un programa en c para poder leer ficheros segun su nombre y al compilar el pragrama me tira un error el compilador quein me auda :P
[code]#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fichero;
char nombre_fichero[256];
char caracter;
char letra;
printf ("\nescriba el nombre de un fichero para visualizar:");
gets (nombre_fichero);
fichero = fopen (nombre_fichero, "r+");
if (fichero == NULL)
{
printf("no se ha encontrado el fichero");
}
else
{
caracter = fgetc (fichero);
while (feof (fichero) ==0)
{
printf ("%c", caracter);
caracter = fgetc (fichero);
}
fclose (fichero);
}
printf ("\nQuiere visualizar otro fichero (S/N)");
gets (letra);
if ((letra == 's') || (letra == 'S'))
{
main()
}
else
{
fflush (stdin);
printf ("\n\nPulse intro para finalizar...");
getchar();
return 0;
}
}
[/code]
sorry el primer code no va dentro del programa se me quedo ahi ;D
Utiliza etiquetas GeShi y pon los errores que te de el compilador, asi sera mucho mas facil ver los fallos y solucionarlos.
Saludos.
errores :
in function main
33 varning: passing argument 1 of 'gets' makes pointer from integer vithout a cast
356 note: expected 'char *' but argument is of tyoe 'char'
38 error: expected ';' before '}' token
Cita de: ankora45 en 20 Septiembre 2012, 17:14 PM
errores :
in function main
33 varning: passing argument 1 of 'gets' makes pointer from integer vithout a cast
356 note: expected 'char *' but argument is of tyoe 'char'
38 error: expected ';' before '}' token
para el error de la line 38 prueba en añadir ";" al final sin comillas. (ami me funciono)
y para el de la 33 estoy buscando si encuentro algo
EDITO:Para el 33 use una trampilla por que yo se c++ solo
bueno pues la trampa es la siguiente
1-le pones #include <iostream> y modificas el gets (letra);
por lo siguiente
std::cin >> letra;
Cita de: Stakewinner00 en 20 Septiembre 2012, 17:24 PM
para el error de la line 38 prueba en añadir ";" al final sin comillas. (ami me funciono)
y para el de la 33 estoy buscando si encuentro algo
Para el de la 33 vease el prototipo de gets(). Espera un puntero a char, y el le pasa un char.
Saludos.
Cita de: 0xDani en 20 Septiembre 2012, 17:30 PM
Para el de la 33 vease el prototipo de gets(). Espera un puntero a char, y el le pasa un char.
Saludos.
yo lo k hice es incorporar el cin de c++ con el include #include <iostream> y modificar el gets por
std::cin >> letra;
lo he probado y va bien
el codigo sera el siguiente
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main()
{
FILE *fichero;
char nombre_fichero[256];
char caracter;
char letra;
char *let1;
printf ("\nescriba el nombre de un fichero para visualizar:");
gets (nombre_fichero);
fichero = fopen (nombre_fichero, "r+");
if (fichero == NULL)
{
printf("no se ha encontrado el fichero");
}
else
{
caracter = fgetc (fichero);
while (feof (fichero) ==0)
{
printf ("%c", caracter);
caracter = fgetc (fichero);
}
fclose (fichero);
}
printf ("\nQuiere visualizar otro fichero (S/N)");
std::cin >> letra;
if ((letra == 's') || (letra == 'S'))
{
main();
}
else
{
fflush (stdin);
printf ("\n\nPulse intro para finalizar...");
getchar();
return 0;
}
}
al ejecutarlo encontre un error que supongo que ya lo arreglaras tu mismo sino ya sabes aki te ayudamos
no xD sigue sin arreglarse ahora pone
33 varin label 'std' defined but not used
Cita de: ankora45 en 20 Septiembre 2012, 17:34 PM
Gracias a los +1 ya lo arregle muchas gracias :rolleyes:
de nada
normalmente no contesto a users que no tengna mas de 10 mensajes por que bastantes veces me encuentro gente que pide ayuda y ya no se le ve el pelo, como tienes la imagen de linux hice una excepción XD
sorry no se arreglo fue un error mio xD sorry
Cita de: ankora45 en 20 Septiembre 2012, 17:37 PM
sorry no se arreglo fue un error mio xD sorry
como minimo compila no? por k a mi si, lo otro sino te sale te intentaremos ayudar
no no me compila bien me da 2 errores y 2 advertencias:
3 error iostream: no such file or directory
33 error: expected expresion ':' token
33 varing: label 'std' defined but not used
12 varing: unused variable let1
@ankora45, si lo compilas con un compilador de C dificilmente te va a dar por bueno el std::cin. Haz una prueba, declara letra como char letra[1].
EDITO: Para obtener un caracter, sin declararlo como array, esta getchar().
Gracias ya solo me tira una advertenci pero el compilador la ignora se puede compilar y funciona correctamente gracias +1 a los dos posteo codigo arreglado;
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fichero;
char nombre_fichero[256];
char caracter;
char letra[1];
printf ("\nescriba el nombre de un fichero para visualizar:");
gets (nombre_fichero);
fichero = fopen (nombre_fichero, "r+");
if (fichero == NULL)
{
printf("no se ha encontrado el fichero");
}
else
{
caracter = fgetc (fichero);
while (feof (fichero) ==0)
{
printf ("%c", caracter);
caracter = fgetc (fichero);
}
fclose (fichero);
}
printf ("\nQuiere visualizar otro fichero (S/N)");
gets (letra);
if ((letra == 's') || (letra == 'S'))
{
main()
}
else
{
fflush (stdin);
printf ("\n\nPulse intro para finalizar...");
getchar();
return 0;
}
}
[code]
[/code]
pero cuando use tu programa hacia bucles raros
para compilar con mi metodo tienes que guardarlo como c++ y compilarlo con g++
lo que encuentro raro es k con c++ se peuda suar c y con c no se pueda usar c++
Cita de: ankora45 en 20 Septiembre 2012, 17:58 PMya solo me tira una advertenci pero el compilador la ignora se puede compilar y funciona correctamente gracias +1 a los dos posteo codigo arreglado
Tu programa tiene varias deficiencias como el uso de "gets" y "fflush(stdin)", por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).
El error principal continua, al llamar a la función "gets" utilizas:
char letra[1];
/* ... */
gets (letra);
/* ... */
if ((letra == 's') || (letra == 'S'))
Ello no es correcto por dos razones: solo se puede almacenar un carácter en el array "letra" (ahí el programa puede reventar) y cuando realizas la comparación no tratas con un carácter sino con una dirección de memoria (donde se almacena el array).
Para que funcione correctamente debería ser mas o menos así:
char letra[2];
/* ... */
gets (letra);
/* ... */
if ((letra[0] == 's') || (letra[0] == 'S'))
Pero debido al uso de "gets" sigue la posibilidad de que el programa reviente (mejor usar "fgets", ello se indica en el tema que mencione).
Un saludo
Aqui te pongo el codigo, y te pongo los errores.
despues del main() te faltaba un punto y coma
Intentas captar un caracter y usas gets() gets es solo para cadenas, para un solo caracter tienes que usar getchar()
Un salduo
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fichero;
char nombre_fichero[256];
char caracter;
char letra;
printf ("\nescriba el nombre de un fichero para visualizar:");
gets (nombre_fichero);
fichero = fopen (nombre_fichero, "r+");
if (fichero == NULL)
{
printf("no se ha encontrado el fichero");
}
else
{
caracter = fgetc (fichero);
while (feof (fichero) ==0)
{
printf ("%c", caracter);
caracter = fgetc (fichero);
}
fclose (fichero);
}
printf ("\nQuiere visualizar otro fichero (S/N)");
letra=getchar();
getchar();//Para que no se acumule en el buffer el intro pulsado
if ((letra == 's') || (letra == 'S'))
{
main();
}
else
{
fflush (stdin);
printf ("\n\nPulse intro para finalizar...");
getchar();
return 0;
}
}