elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 20:49  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  ***********FAQ************ Preguntas Frecuentes y Errores comunes en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ***********FAQ************ Preguntas Frecuentes y Errores comunes en C  (Leído 13,328 veces)
zheo


Desconectado Desconectado

Mensajes: 707



Ver Perfil
***********FAQ************ Preguntas Frecuentes y Errores comunes en C
« en: 29 Abril 2004, 03:35 »

Bueno pues este mensaje es una especie de mini-FAQ con los errores más comunes o las preguntas más frecuentes que se dan al empezar a pogramar  C o C++
Si quereis proponer algun añadido al FAQ ponedlo en este hilo.

Preguntas y Errores más Frecuentes

1.- Valores de retorno y parámetros de la función main()

Según el estándar, la función main sólo tiene un posible valor de retorno: int. Ni void, ni un valor indeterminado (es decir, no poner nada) ni ningún otro.
Si te fastidia tener que escribir un return al final de la ejecución de la función main(), te alegrará saber que, al menos en C++, no es necesario escribir una instrucción return de forma explícita, ya que el compilador asume por defecto un return 0, que se considera que la ejecución ha finalizado correctamente.
Por el momento no tengo información acerca de lo que dice el estándar de C, así que si quieres estár seguro de que sigues el estándar tendrás que poner un return 0 en la función main() (venga, que no son tantos caracteres ;))

Adicionalmente los únicos parámetros estándar a la función main son, o bien ninguno: int main () {} (para los programadores de C, no hay que poner void) o bien: int main (int argc, char * argv[]) {}

En este link está la opinión de Bjarne Stroustrup - creador del lenguaje C++ - al respecto: http://www.research.att.com/~bs/bs_faq2.html#void-main


2.- Uso de la biblioteca conio.h

La biblioteca conio.h no es estándar sino que es propiedad de Borland, y está incluida en sus compiladores. Es una biblioteca de manejo de entrada y salida de datos en la consola para el sistema DOS. Que no sea estandar significa que no la encontrarás implementada -o al menos totalmente- en muchos compiladores, y más importante, en otros sistemas, lo que reduce la portabilidad de tu código. Por otro lado la biblioteca se considera obsoleta, y es posible que algunas de las funciones que incluye no funcionen o lo hagan incorrectamente.
Pero lo más importante es darse cuenta de que esta biblioteca no es estrictamente necesaria para programar. Por experiencia las funciones más usadas de esta biblioteca son, con diferencia, clrscr() gotoxy() y getch().
clrscr() borra la pantalla, algo que por lo general no es necesario; si estás ejecutando un programa en línea de comandos es fácil y rápido teclear un comando (cls, clear) que borre la pantalla en cuestión si lo necesitas. Por contra puede que sea molesto que un programa tome la iniciativa y borre la pantalla, ya que quizá tenga datos que el usuario quiera conservar. Es decir que no pasa nada si no borras la pantalla. Normalmente la persona que usa un programa de línea de comandos no espera que eso ocurra.
gotoxy() el cursor en una determinada posición de la pantalla. Esto puede resultar útil en ocasiones, pero seamos sinceros: no suele ser muy necesario mover el cursor por la pantalla, o al menos no extrictamente necesario. Por ejemplo si estás aprendiendo a programar, eso es completamente supérfluo. Si programas una aplicación avanzada es casi seguro que tendrá un interface Gráfico. En último caso, si estás programando una aplicación avanzada en consola, prosiblemente a esas alturas ya sabrás cómo hacer tú mismo esta función utilizando llamadas al sistema, lo que tiene el beneficio de que puedes encapsular esa función de cara a la portabilidad, en vez de confiar en una función de biblioteca dependiente del sistema.

getch() recoge un carácter de la entrada estándar. Para eso tienes cerca de miles de funciones estándar que lo hacen. Vale, quizá no tantas, pero tienes al menos una en C getchar() y otra en C++  std::cin.get() ¿Porque usar getch() que NO es estándar cuando puedes usar una función estándar que hace exactamente lo mismo?
Antes de que me llameis mentiroso, hay que reconocer que getch() no hace exactamente lo mismo que las otras dos funciones. getch() NO presenta el caracter capturado por la pantalla y la entrada es sin buffer (lo que viene a decir que no hace falta pulsar enter) Sin embargo no creo que eso por lo general sea un grave problema, es más, una entrada sin buffer puede ser incluso un problema: no puedes corregir la entrada si te equivocas.



« Última modificación: 21 Febrero 2005, 00:53 por zheo » En línea

Sólo hay 10 tipos de personas: las que saben binario y las que no.

¿Quieres programar un videojuego? Si quieres unirte pulsa aqui
Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.561


Shrödingerificado


Ver Perfil
Re: Preguntas Frecuentes y Errores comunes en C
« Respuesta #1 en: 29 Abril 2004, 07:40 »

3.- ¿Cómo aprendo a programar en C/C++?

Aquí tienes dos buenos manuales, uno para C:
http://mec21.etsii.upm.es/ayudainf/aprendainf/AnsiC/leng_c.pdf

y otro para C++.
http://mec21.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf


4.- ¿Y qué hago para programar?

Para poder llevar a la práctica lo que aprendas necesitarás un editor para escribir el código, como puede ser el bloc de notas o emacs. Un compilador para construir los ejecutables. Si además quieres depurar tus programas necesitarás un depurador. A menudo el editor, el compilador y el depurador vienen en un sólo programa conocido como Entorno de Desarrollo Integrado o IDE (Integrated Development Environment)


5.- Quiero un IDE ¿qué IDE puedo usar?
Deberías haber mirado el tema pegado en el que puedes encontrar entornos de programación y compiladores para todos los lenguajes, pero ya que no lo has hecho puedes descargar el dev cpp de la siguiente página:

http://www.bloodshed.net/devcpp.html

Tienes además un manual de instalación y primeros pasos con dev cpp hecho por el mismísimo Zheo en:

http://www.hispabyte.com/biblioteca/index.php?action=file&id=319

Editado: No hace falta aprender C para saber C++ (de hecho puede crear malos vicios ;) ) Por otro lado IDE estaba bien escrito  :) Muchas gracias por la colaboración jefe :D


« Última modificación: 29 Abril 2004, 08:21 por zheo » En línea

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones
Griph

Desconectado Desconectado

Mensajes: 253


Ver Perfil
Re: Preguntas Frecuentes y Errores comunes en C
« Respuesta #2 en: 15 Septiembre 2004, 06:08 »

Algo que cabe acotar este hilo es lo siguiente:

Que a veces cuando se  trabaja con Matrices (Arrays o Arreglos, lo tres nombres son sinónimos) puede ocurrir que se escriba en un elemento que no está disponible. Por consiguiente estaríamos escribiendo en una dirección en memoria no reservada para tal variable; por lo tanto escribiríamos en un sector de la memoria que no conocemos, y podríamos dañar la aplicación que se encuentre en esa dirección de memoria aleatoria (porque puede ser cualquiera, aunque será la que le sigue al elemento anterior). Veamos un ejemplo de este tipo de error (no lo pruebes, puede bloquear el ordenador):

Código:
#include <stdio.h>

int main()
{
//Declaración de las variables:
     int temp[24];
     float promedio;
     int hora;

//Utilización de un Bucle: "For".
     for(hora=0; [b]hora<28[/b]; hora++)
          {
          printf("La Temperatura de las %i: ", hora);
          scanf("%i", &temp[hora]);
          promedio += temp[hora];
          }
//Se obtiene el promedio de temperaturas de todo un día.
     promedio = promedio / 24;

//Se imprimen los resultados en pantalla (salida estándar).
     printf("\nLa temperatura promedio es %f\n", promedio);
}

Citar
int temp[24];
..........
..........
for( hora=0; hora<28; hora++ )
..........
..........

Aquí podemos observar que el bucle for nos da la posibilidad de seguir escribiendo en memoria aun cuando se han acabado las variables del arreglo de enteros ya declarado. Todo por un simple error en la condición del bucle usado.

Saludos.

PD: tal vez este no sea un error frecuente en la programación en lenguaje C, pero puede suceder si el programador se equivoca al contar el número de elementos. En fin nadie esta libre  de error: nadie.

En línea

"...la Base está en Aprender a Programar..."
Juancito

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: ***********FAQ************ Preguntas Frecuentes y Errores comunes en C
« Respuesta #3 en: 8 Mayo 2005, 15:13 »

Errores Comunes:

*Olvidarse poner el & referenciando un lugar de memoria:

Código:
...
//Mal
           scanf ("%d", numero);

//Bien
           scanf ("%d", &numero);
...


*No Abrir/Cerrar correctamente Parentesis:

Código:
//MAL !!

Void main ()
{
...         
           for (...)
           {
                         ....
                          while (...)
                          {
                                    ....
}} //dos parentesis, falta uno de cierre !!!


//Bien  :D

Void main ()
{
...         
           for (...)
           {
                         ....
                          while (...)
                          {
                                    ....
                           }
           }
}

Si se tiene una indentación adecuada, no surgen este tipo de error.


*Mal uso de operadores:
Un ejemplo tipico es usar el operador unario ++ en cualquier lado y no poner bien los parentesis.

Código:
si a =1, b = 4, c = 5 -->

resultado = a + b / --c;    //Total --> 2

resultado = (a + b) / (c - 1);    //Total --> 5/4 > 2

Hay que saber bien las Precedencias de los operadores. Y poner   parentesis es un segundo de vida que les cuesta, pero es un minuto ganado en cuando a la legibilidad del programa.

Todo por hoy...

c-you

Juan


« Última modificación: 8 Mayo 2005, 15:19 por Juancito » En línea
--]SpideR[--

Desconectado Desconectado

Mensajes: 27


No Sufro de locura, la disfruto dia a dia


Ver Perfil WWW
Re: ***********FAQ************ Preguntas Frecuentes y Errores comunes en C
« Respuesta #4 en: 26 Julio 2005, 07:25 »

Uno de los errores muy comunes al momento de compilar es que nos aparezca el mensaje:

Lvalue required in function

y sucede en estos casos:

Código:
int ConvierteMayuscula (char *cad1, const char *cad2, int *n)
{
int i, j, k, u=0;

for (i=0; cad2[i]!= '\0'; i++)
{
if((0<=cad2[i]) || (cad2[i]<=9))
k++;
else
{
j=1;
cad1[u]=toupper(cad2[i]);
u++;
}

}
(int)n=k;

if (j==0)
return 0;
else
return 1;
}

En esta funcion se intenta castear la variable n que es de tipo (INT *) a una variable de tipo (INT),  el compilador nos muestra el erro que haciamos mencion antes.
Este error es muy comun y lo que nos esta indicando es que necesitamos un valor del lado izquierdo de la operacion. Suele darse mucho cuando se trabaja con punteros, queriendole asignar un "valor" a un puntero y este valor no es una direccion de memoria o cuando se quiere hacer una operacion del lado "izquierdo" de la asignacion.


Espero que les sirva.

SalHugos

Skiel
« Última modificación: 27 Julio 2005, 03:09 por --]SpideR[-- » En línea

-Libera tu mente que tu culo la va a seguir!!!!

-Quieren al picho y no a sus pulgas!!!!
Kanny

Desconectado Desconectado

Mensajes: 45


No hay camino hacia la libertad.... la libertad es


Ver Perfil
Re: ***********FAQ************ Preguntas Frecuentes y Errores comunes en C
« Respuesta #5 en: 12 Febrero 2006, 22:11 »

(disculpen si aparece varias veces mi respuesta.. pero es que me da error al publicar :-)

Para evitar esos errores de asignamiento de memoria en los arrays, lo mas comodo y "limpio" es usar constantes a traves de los #defines
Con programas pequeños es una tonteria.. pero en cuanto se empieza a hacer programas un poco mas largos te das cuenta de la gran utilidad que tienen :shocked:

weno.. ahí va un ejemplo simple:

#include <stdio.h>

#define LONGITUD 24     //ajustamos la longitud de la cadena

main ()
{
int cadena [LONGITUD];  //declaramos la cadena
int index;                       //declaramos contador

for (index=0;index<LONGITUD;index++)
  {
  printf ("\nIntroduce el numero %d : ",index+1);
  scanf ("%d",&cadena[index]);
  }
return 0;
}
En línea
JuszR


Desconectado Desconectado

Mensajes: 2.844


Programming, GNU/Linux & RI


Ver Perfil
Re: ***********FAQ************ Preguntas Frecuentes y Errores comunes en C
« Respuesta #6 en: 30 Marzo 2006, 04:45 »

Emular gotoxy() con el Dev-C++

Si usas esto:
Código:
#include <stdio.h>
#include <conio.h>

int main()
{
clrscr();
gotoxy( 20, 10 );
printf( "Estoy aqui" );

return 0;
}

El Dev-C++ te dará error de que gotoxy no está definido. Esto es porque necesita la librería conio y no es estándar, es de Borland.

Para eso, solo tienes una solución, usar un FOR:
Código:
for(int y=0;y<10;y++)
printf("\n");

for(int x=0;x<20;x++)
printf(" ");

printf("Hello World");

 ::)
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
- GNU/Linux is an alternative, not a replacement. Want a Windows replacement? Buy Mashitosh.
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: ***********FAQ************ Preguntas Frecuentes y Errores comunes en C
« Respuesta #7 en: 30 Marzo 2006, 15:23 »

Como se indica en uno de los primeros mensajes es mejor utilizar las facilidades del SO que se este utilizando.

En el caso de MS Windows se puede utilizar la funcion SetConsoleCursorPosition.

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
JuszR


Desconectado Desconectado

Mensajes: 2.844


Programming, GNU/Linux & RI


Ver Perfil
Manuales de C
« Respuesta #8 en: 18 Abril 2006, 05:06 »

Manuales de C

Español



Inglés
« Última modificación: 18 Abril 2006, 05:16 por X.Cyclop » En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
- GNU/Linux is an alternative, not a replacement. Want a Windows replacement? Buy Mashitosh.
JuszR


Desconectado Desconectado

Mensajes: 2.844


Programming, GNU/Linux & RI


Ver Perfil
Manuales de C++
« Respuesta #9 en: 18 Abril 2006, 05:12 »

Manuales de C++

Español



Inglés

Nota: Si buscas algún e-book en inglés (de C++ y/o Asm), pídelo por privado. No voy a subirlos porque son como 38, más de 120Mb. ::)
« Última modificación: 18 Abril 2006, 05:18 por X.Cyclop » En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
- GNU/Linux is an alternative, not a replacement. Want a Windows replacement? Buy Mashitosh.
H@T


Desconectado Desconectado

Mensajes: 540



Ver Perfil WWW
Re: Preguntas Frecuentes y Errores comunes en C
« Respuesta #10 en: 24 Abril 2006, 02:15 »

Editado: No hace falta aprender C para saber C++ (de hecho puede crear malos vicios

Entonces no entiendo porque en la facultad primero me enseñan C y luego C++???

Es cierto eso de los malos vicios, pq a veces te dicen en C hagalo asi, despues en C++ te dicen ahora es asi, olvidense de C, no los entiendo.
En línea

H@T
http://www.redes-seguridad.com.ar
redes-seguridad.blogspot.com/
De@th
TROLL

Desconectado Desconectado

Mensajes: 169


Ver Perfil
Re: ***********FAQ************ Preguntas Frecuentes y Errores comunes en C
« Respuesta #11 en: 26 Abril 2006, 17:51 »

Y Que Hay Del Comando System???
Como Pasarle Argumentos O Usar Otra Funcion Con El Mismo Fin Que Lo Permita ??
En línea

(8) REPENT, that's what I'm talking about
Whose mistake am I anyway? (8)
(8) You can't kill me motherfuckers ! (8)

Marilyn Manson - Antichrist Superstar
JuszR


Desconectado Desconectado

Mensajes: 2.844


Programming, GNU/Linux & RI


Ver Perfil
Re: Preguntas Frecuentes y Errores comunes en C
« Respuesta #12 en: 26 Abril 2006, 20:05 »

Entonces no entiendo porque en la facultad primero me enseñan C y luego C++???

Es cierto eso de los malos vicios, pq a veces te dicen en C hagalo asi, despues en C++ te dicen ahora es asi, olvidense de C, no los entiendo.
Porque te enseñan los 2 tipos de programación: Estructurada y Orientada a objetos. Por eso es mejor aprender los 2. :)
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
- GNU/Linux is an alternative, not a replacement. Want a Windows replacement? Buy Mashitosh.
JuszR


Desconectado Desconectado

Mensajes: 2.844


Programming, GNU/Linux & RI


Ver Perfil
Re: Preguntas Frecuentes y Errores comunes en C
« Respuesta #13 en: 30 Abril 2006, 07:34 »

Entonces no entiendo porque en la facultad primero me enseñan C y luego C++???

Es cierto eso de los malos vicios, pq a veces te dicen en C hagalo asi, despues en C++ te dicen ahora es asi, olvidense de C, no los entiendo.
Porque te enseñan los 2 tipos de programación: Estructurada (C) y Orientada a Objetos (C++).
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
- GNU/Linux is an alternative, not a replacement. Want a Windows replacement? Buy Mashitosh.
JuszR


Desconectado Desconectado

Mensajes: 2.844


Programming, GNU/Linux & RI


Ver Perfil
Re: ***********FAQ************ Preguntas Frecuentes y Errores comunes en C
« Respuesta #14 en: 30 Abril 2006, 07:37 »

Ediciones del Visual Studio.Net

http://msdn2.microsoft.com/en-us/library/hs24szh9(VS.80).aspx
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
- GNU/Linux is an alternative, not a replacement. Want a Windows replacement? Buy Mashitosh.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Simbolos comunes [Redes]
Redes
Sorke 3 1,116 Último mensaje 17 Octubre 2011, 19:12
por T0rete
Windows Repair 1.5.8: Corrige los errores más comunes de Windows utilizando...
Noticias
wolfbcn 0 504 Último mensaje 4 Enero 2012, 19:24
por wolfbcn
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines