Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: niñoAtómico en 11 Octubre 2013, 01:11 am



Título: Dudas sobre las funciones void en C
Publicado por: niñoAtómico en 11 Octubre 2013, 01:11 am
Hola Gente:

Me dieron esta consigna:

Crear un programa en C que tenga un menú, de dos opciones. crear archivo y leer archivo. Lo resolví así:

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int textocrea();
int 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;
}
  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");
    scanf( " %[^\n]",&caracter );
   fputs(caracter, vfile);           
     fclose(vfile);   
    return 0;   
  }
 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);
   
   return 0;
    
    
    }


Sin embargo me dice mi profe que por qué no definí las funciones como void. Probé y no funcionan con void. Tampoco funciona el gets en vez del scanf. Alguien sabe por qué pasa esto? Cómo es lo de las funciones void?


Desde ya gracias Chicos!!!


Título: Re: Dudas sobre las funciones void en C
Publicado por: Eternal Idol en 11 Octubre 2013, 01:27 am
http://en.wikipedia.org/wiki/Void_type


Título: Re: Dudas sobre las funciones void en C
Publicado por: niñoAtómico en 11 Octubre 2013, 01:42 am
Gracias!!! Te copas y escribis un ejemplo?

Y un misterio es por qué no funciona con gets y sí con scanf... Si lo prueban con gets devuelve cero y no pide el string, es raro...

Gracias!!!


Título: Re: Dudas sobre las funciones void en C
Publicado por: Eternal Idol en 11 Octubre 2013, 01:45 am
Código
  1. void f1();
  2.  
  3. void f1()
  4. {
  5. //codigo aca
  6. //no usar return
  7. }

gets es una funcion insegura que no permite especificar el tamaño del buffer, es mejor no usarla jamas.


Título: Re: Dudas sobre las funciones void en C
Publicado por: niñoAtómico en 11 Octubre 2013, 02:14 am
Muchísimas gracias, era algo simple que nadie me sabía decir.

Buena onda!!!  ;-)



Título: Re: Dudas sobre las funciones void en C
Publicado por: Eternal Idol en 11 Octubre 2013, 10:06 am
De nada  ::) Igual te recomiendo conseguir algun libro, asi vas a tener una buena base y poder resolver casi todos tus dudas.


Título: Re: Dudas sobre las funciones void en C
Publicado por: vangodp en 11 Octubre 2013, 10:25 am
Código
  1.  
  2. #include <iostream>
  3. #include <windows.h>
  4. using namespace std;
  5.  
  6. main ( )
  7. {
  8.    cout << "Hola" << endl;
  9.    system ("pause>nul");
  10. }
  11.  
  12.  

A mi este mini código me ha funcionado :D

El return/int en main es por potabilidad y para obtener códigos de errores?
Creo que para obtener parámetros externos de otras aplicaciones no es eso??
Soy muy nobs y me gusta aprender también XD
tks Idol ;-)


Título: Re: Dudas sobre las funciones void en C
Publicado por: Eternal Idol en 11 Octubre 2013, 10:34 am
Es para que el que llama a tu programa pueda obtener un resultado del mismo de manera sencilla. Notese que yo no use void para main.


Título: Re: Dudas sobre las funciones void en C
Publicado por: niñoAtómico en 11 Octubre 2013, 12:03 pm
Tengo dos libros muy copados de Deitel y deitel sobre programación que me dan en la facu, pero lo del void no estaba bien explicado...   :-[ Que hace el minicódigo?

Saludos...


Título: Re: Dudas sobre las funciones void en C
Publicado por: vangodp en 11 Octubre 2013, 17:59 pm
Mira no es que los libros sean malos ok eso es lo que pasa por aprender de los libros.
As veces pillas algo y no tienes nadie para poder preguntar.
Como sabes un programa siempre devuelve algo a menos que digamos el contrario con el void.
main es una función igual que todas las demás.
Tiene que ser main por que es la primera función que llama el compilador.
Se supone que una función hace algo no?
Como cuando llamas a una función que suma 2 números esperas algo de ella.
Pos bien...a main le pueden llamar otros programas externos y puede recibir parámetros como todas las demás funciones, (no te olvides main es una función y las funciones reciben y devuelven valores) o así creo que es.
Y ese programa puede estar esperando que main le devuelva algo, cosa que no siempre o casi nunca es cierto, pero puede pasar.
Al igual que main también puede esperar datos entre ().
Se supone que cuando un programa no retorna nada debemos ponerle un void de retorno.
Pero no nos va doler si ponemos como int y al final le ponemos que no retorna nada.
Ademas ni es necesario poner el return aun que si es muy muy recomendable, pero ya ves tu el problema de no ponerlo XD
Se recomienda poner return 0; dicen que es por portabilidad ni idea jaja.
Así que creo que siempre siempre deberías poner como int main por que en realidad da igual hasta el día que te haga falta usar el return de main y sus () para recibir argumentos.
Bueno eh explicado aquí lo poco que se, comparado con algunos aquí soy una pulga pero si me equivoco que alguien me corrija.  :rolleyes:


Título: Re: Dudas sobre las funciones void en C
Publicado por: niñoAtómico en 11 Octubre 2013, 18:13 pm
Muy buena la explicación para mi que soy pequeño y sé poco, muchas gracias!!! ;-)


Título: Re: Dudas sobre las funciones void en C
Publicado por: vangodp en 11 Octubre 2013, 22:41 pm
Mira no es que los libros sean malos ok eso es lo que pasa por aprender de los libros.
As veces pillas algo y no tienes nadie para poder preguntar.
Como sabes un programa(buen lo pongo aqui programa y función es lo mismo, las demás funciones son subprogramas) siempre devuelve algo a menos que digamos el contrario con el void.
main es una función igual que todas las demás.
Tiene que tener nombre main por que es la primera función que llama el compilador y busca una llamada main las demas funciones las llamamos nosotros desde main y pueden llamar como quieras.
Se supone que una función hace algo no?
Como cuando llamas a una función que suma 2 números esperas algo de ella y ademas tienes que pasarle los numeros que vaya sumar.
Pos bien...a main le pueden llamar otros programas externos y puede recibir parámetros como todas las demás funciones, (no te olvides main es una función y las funciones reciben y devuelven valores ) o así creo que es.
Y ese programa puede estar esperando que main le devuelva algo, cosa que no siempre o casi nunca es cierto, pero puede pasar.
¿Quien llama main?¡Lo llama windows o otros programas si no sabe como es su nombre no le puede llamar, siempre main!
El main también puede esperar datos entre ().
Cuando un programa no retorna nada debemos ponerle un void y no hace falta el return 0;.
Pero no nos va doler si ponemos como int y al final le ponemos que no retorna nada(return 0; cero es entero por eso no hay problema).
Ademas ni es necesario poner el return aun que si es muy muy recomendable, pero ya ves tu el problema de no ponerlo XD
Se recomienda poner return 0; dicen que es por portabilidad ni idea jaja.
Así que creo que siempre siempre deberías poner como int main por que en realidad da igual hasta el día que te haga falta usar el return de main y sus () para recibir argumentos.
Bueno eh explicado aquí lo poco que se, comparado con algunos aquí soy una pulga pero si me equivoco que alguien me corrija.  :rolleyes:
Los programas llaman unos a otros y no solo dentro del código c++, no te olvides que windows también es un programa y puede llamar a otros programas.
Programas llaman programas dentro y fuera de nuestro programa ;)
bueno me gustaria que algun super programador de los que tenemos por aquí me diga si eh fallado mucho :D