1

Espero me puedan ayudar a ver mi error: ¿Por qué me da error el la función clrscr y por qué a la par del main hay que poner (void)?

  #include<stdio.h>
  #include<conio.h>

 main (void)/*porque el void?*/{
 clrscr (); /*error del clrscr no se porque me sale error */

 int i,n,v[100];

 printf ("Ingrese la cantidad de elementos");

 scanf("%d",&n);

 for(i=1;i<=n;i++)
 {
 printf("Ingrese un elemento: ");

 scanf("%d",&v[i]);

 printf("el elemento es: %d\n",v[i]);
 }

  getch();
} 
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
Napo wick
  • 11
  • 1
  • 3
  • ¿Que error?, revisar [ask], saludos. – Jorgesys Nov 07 '19 at 16:56
  • Son dos preguntas diferentes. Para empezar, `clrscr()` no es una función de C estándar. Es una extensión al lenguaje que se introdujo en [Lattice C y se usó en el popular Borland Turbo C (la cabecera es `conio.h`)](https://es.wikipedia.org/wiki/Conio.h) y funciona únicamente en DOS/Windows. Para continuar, `main` debe devolver un entero y tener dos parámetros (un entero con el número de parámetros y una matriz de cadenas de caracteres), aunque no pasa nada si se define de forma que no tenga parámetros de entrada (`void`) si no vas a hacer uso de ellos. – OscarGarcia Nov 12 '19 at 10:17

1 Answers1

3

¿Por qué me da error el la función clrscr?

La función clrscr debería estar definida en la cabecera <conio.h>, la cuál no forma parte del estándar de C, esto implica que pueden haber versiones de dicha cabecera que no dispongan de dicha función.

Si consultamos la información al respecto que nos ofrece la Wikipedia1 (resaltado mío):

conio.h (console input/output, consola de entrada/salida) es un archivo de cabecera escrito en C usado mayormente por los compiladores de MS-DOS para proveer un sistema de E/S por consola.​ Éste no es parte de la biblioteca estándar de C o ISO C, ni está definida por POSIX.

Las funciones de biblioteca declaradas por conio.h varían ligeramente dependiendo el compilador. Originalmente implementada en Lattice C, las funciones eran mapeadas directamente a las primeras pocas funciones INT 21H de DOS. La biblioteca provista por Borland Turbo C no usaba la DOS API pero accedía a la memoria de vídeo directamente para la salida y usaba llamadas de interrupción de la BIOS. Esta biblioteca contiene funciones adicionales inspiradas en las funciones de Turbo Pascal.


main (void)/*porque el void?*/{

En el lenguaje , hay tres maneras de describir los parámetros que recibirá una función:

  • Parámetros explícitos: La función recibirá como argumentos aquellos parámetros que se definan:

      void función(int a, int b, int c);
    
  • Parámetros desconocidos: La función puede recibir un número indeterminado de argumentos de tipos indefinidos:

      void función();
    
  • Sin parámetros: La función no espera ningún argumento.

      void función(void);
    

Ese void indica que main no acepta argumentos.


1 Y la puntualización del maestro OscarGarcia: clrscr() no es una función de C estándar. Es una extensión al lenguaje que se introdujo en Lattice C y se usó en el popular Borland Turbo C (la cabecera es conio.h) y funciona únicamente en DOS/Windows.

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
  • 1
    Para que una función en C tenga parámetros desconocidos, necesita ser definido como "variadic", algo como esto: `void func(int b,...);` – MrDave1999 Nov 12 '19 at 10:46
  • @MrDave1999 [No estés tan seguro](https://tio.run/##S00uKNBN/v9fOTMvOac0JVXBprgkJTNfL8OOi6ssPzNFIU1D05qLKzOvRCE3MTNPAySmyVXNxZmmYWhoqKNgZGSko2BsbAxUxFmUWlJalKdgYM1Vi9AMUltQBNSfphEf7xbq5xzi6e8XHw9UX/v/PwA "ecpp + C (gcc) – Try It Online"). – PaperBirdMaster Nov 12 '19 at 11:09