Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - eleon

#61
Pues hay más de uno...

Código (cpp) [Seleccionar]
include<iostream.h>
using namespace std;


1- La función include la analiza el preprocesador, por tanto hay que poner antes un "#". Además la librería no se llama "iostream.h" sino "iostream"; quedaría asi:

Código (cpp) [Seleccionar]
#include<iostream>
using namespace std;


2- En esta parte los puntos suspensivos del final te darán un error como una casa porque eso no es ningún tipo de instrucción:

Código (cpp) [Seleccionar]
int main(void){
char cadena[40]={},equipo[20]={},equipo2[20]=...


3- Para usar "gets" debes añadir la librería "stdio.h".
4- La función "strcpy()" tampoco te va a funcionar si no añades la librería "string.h".
5- Te falta un "}" (cerrar llave) al final del programa.

Y por último gets no se debe usar, está totalmente desaconsejado; ya que programas en c++ puedes usar "cin.getline()".

Saludos.
#62
Programación C/C++ / Re: Notaciones
6 Febrero 2012, 18:27 PM
Como buena costumbre para tener el programa claro a la vista de otros programadores, las clases van en los ficheros cabecera (.h).

¿Se debe añadir una letra al nombre de la clase que la identifique con el proyecto?, es correcto hacerlo sobre todo cuando el proyecto en si se compone de varios ficheros con distintas clases, y esto es para aclarar a qué proyecto o sub-programa pertenece una clase.

Tanto la declaración como la definición de la clase va en el fichero cabecera, sin embargo la definición de las funciones miembro (funciones que forman parte de la clase) van en el fichero principal.

typedef lo que hace es asignarle un "sobrenombre" a una clase o un tipo, ejemplo:

Código (cpp) [Seleccionar]
typedef unsigned short int USHORT

Ahora en vez de poner "unsigned short int" cada vez que queremos declarar una variable con esos prefijos, podemos usar directamente "USHORT".

¿Se puede usar unido a una estructura?, si:

Código (cpp) [Seleccionar]
typedef struct {
//Variables y funciones miembro
} sobrenombre;


Asi de sencillo, no efectúa ningún tipo de cambio en una estructura sino que la declaras como anónima y le añades un sobrenombre.

CitarLas estructuras. Siempre van en las cabezeras, y se el prefijo es S.
E con enum
C con las classes

Eso es lo mismo que cuando declaras punteros y les pones una "p" delante (por ejemplo: "*pElemento1"), sirve para aclarar de que se trata de un puntero, al igual que los enum y las clases sirve también para identificarlas. No es una premisa sintáctica sino una buena forma de programación; aun asi excepto en los punteros lo demás se suele encontrar muy poco.

Saludos.
#63
C++ es una extensión de C, no hay nada que puedas hacer con C y que no puedas con C++ pero muchas cosas que si puedes hacer con C++ no te las permite C.

Actualmente C se usa para programar proyectos a sabiendas de que vas sobrado con este lenguaje, pero si no sabes qué vas a necesitar o buscas metas un poco más complejas lo más lógico es tirar con C++.

De todas formas si sabes programar en C++ sabes programar en C, te basta con conocer las diferencias conceptuales entre lenguaje estructurado y lenguaje orientado a objetos y las diferencias sintácticas entre C y C++.

Saludos.
#64
No estoy muy metido en los sockets pero me da que el fallo es más bien por la clase/estructura o por el puntero.

El error de violación de acceso se da cuando intentas acceder a una zona de memoria errónea. Si muestras las estrucutras quizá se vea más claro pero posiblemente sea o porque estás intentando acceder a una zona de la memoria (de una clase) declarada como privada sin ningún método accessor, o porque estás asignándole a un puntero el valor NULL.

Comprueba a ver y comentas. Un saludo.
#65
CitarSiendo principiante me ha tomado tiempo entender cada parte de ese codigo, pero no llego a entender por qué dentro de la funcion Generasubcadena se declaro la cadena x[ ] como "static". Cuando borro "static" del codigo  el programa no muestra ninguna cadena, asi que parece ser algo importante.

Lo que hace "static" es que, al finalizar la función, no se eliminan las variables declaradas dentro de ella, esto es, si almacenas algo en la tabla declarada como "static", al terminar la función podrás volver a llamarla y seguirás pudiendo trabajar con los datos almacenados en la tabla o incluso si devuelves un puntero puedes usarla en el cuerpo del programa (que es exactamente lo que hace tu código).

CitarY una pregunta mas: Asi como en el codigo anterior, a veces se crean cadenas dentro de una funcion, luego si queremos retornar esa cadena al main, lo que se retorna es un puntero que apunte hacia dicha cadena. Lo que no entiendo es: Cuando se retorna el puntero, la funcion se cierra y dado que la cadena solo es conocida localmente dentro de la funcion ¿no deberia borrarse todo el contenido del arreglo?  por tanto ¿el puntero ya no tendria que apuntar?

Totalmente correcto, excepto porque se declara como "static", al finalizar la función no se elimina.

Saludos.
#66
Posiblemente eso sea debido a que has escrito una instrucción ilegal (el IDE no te marca ningún error al compilar porque no hay error sintáctico sino error conceptual).

Si posteas el código podría indicarte dónde está el error pero yo ya te digo que si se trata de vectores lo más probable es que estás recorriendo la tabla hasta elementos que no existen, esto es, si la tabla/vector tiene 10 elementos, tú estás intentando acceder al elemento número 11.

En caso de que hubieses puesto "vector [11] = 2;" el compilador si te indicaría el error porque no existe el elemento número 11, sin embargo desde un bucle:

Código (cpp) [Seleccionar]
for (i = 0; i <= 10; i++)
{
vector [i] = 0;
}


Como le estás diciendo al compilador que acceda al elemento "i" de la tabla (el cual va de 0 en adelante y por tanto lo toma por correcto) no te indica ningún fallo, pero el bucle llega al elemento número 11 el cual no existe.

Ese es el fallo más común según el problema que planteas, y no tiene que ver con el compilador/IDE.

Compruebalo y si no es asi postea el código. Un saludo.
#68
Con un contador. Si cada vez que se ejecuta el bucle se imprime una línea, debes llevar un contador que calcule el número de lineas impresas y al llegar a 25 con un condicional te pida presionar {ENTER}. Ejemplo:


short unsigned int contador = 0;
while (condicion)
{
//Instrucciones para imprimir la línea
contador += 1;

if (contador == 25)
{
scanf ("");
contador = 0; //Lo reiniciamos para que vuelva a contar 25 líneas
}


Y en esta parte:

do{
gets(pausar);
}
while(strcmp(pausar,"")!=0);


No es correcto el uso de gets, es aconsejable cambiarlo por scanf. Si has declarado la cadena "pausar" con 2 elementos, el usuario puede perfectamente introducir "sidhashi {ENTER}" y gets lo recoge todo almacenándolo en zonas de memoria consecutivas y arriesgándote a que sobreescriba sobre otros datos en uso.

Saludos.
#69
#include <time.h>
#include <stdio.h>

void delay(int secs)
{
    int i;
    for(i = (time(NULL) + secs); time(NULL) != i; time(NULL));
}

int main()
{
    int sec;
    printf ("Segundos a pausar: ");
    scanf ("%d", &sec);
    delay(sec);
}
#70
He investigado un poco por mi parte y las librerías time.h/ctime no tienen función de pausa implementadas sino que se usan funciones incluidas en ellas para crearla. Es muy sencillo aqui tienes una guía: http://codigoc.org/481-funcion-delay-en-c

Saludos.