Hilo Oficial de C/C++

1, 2, 3, 4, 5, 6
Estoy "cansado" de hace programas en consola, y si bien es cierto que aun me queda mucho por delante, tenia ganas de hacer programas con "ventanitas". Para ello hay muchas opciones (o eso creo) y librerias, y no se por cual decantarme.

En rpincipio estoy mirando manuales para usar las APIs de Windows. q tal es esto? al ser precisamente de windows no lo veo muy estandar, por lo que supongo que en linux no funcionaria. con que puedo empezar?
Yo de programacion con ventanitas como dices pues en windows son las API, para linux supongo (que me corrijan si la cago) seria QT para KDE y GTK pa GNOME.


Yo sigo programando en consola, y seguire durante un tiempo, al menos que termine de estudiar C++ y pase a CSharp [amor] [amor] y asi hare algo con ventanitas, o eso intentare jojojo.

Un saludo, se que no te ayude, pero no tengo idea.
Ejem, esta semana no he ido a clase y digamos que no tengo ni puta idea de vectores... Algún manual sencillito y corto o algún interesado en exlicarlo?? XD

Fdo- An0n1m0
Bueno otra de mis cochambrosas explicaciones:

Un vector es una matriz de una dimension.

Y que es esto?

Pues es un conjunto de variables del mismo tipo

tipo nombre[numero de variables];

donde tipo es uno de los tipos de variables de C(int, float, char...etc)

el nombre es el nombre de la variable (no es nad ade otro mundo)

y el numero de variables, es un numero entero, o sea, el numero de variables que tiene el vector. Un ejemplo:

int numeros[10];

Aqui hemos declarado un vector con 10 elementos del tipo int llamados numeros, son 10 elementos, y el primero es el "0", o sea, este vector va desde el "0 al 9", para acceder a cada elemento se pone el numero de este entre los corchetes:

numeros[5] = 10;

Aqui asignamos el valor 10 a la variable 5 de ese vector.


Por otra parte no necesariamente es un numero lo que esta entre corchetes, puede ser un numero que hace de indice: un ejemplo vale mas que mil palabras:

for(i = 0; i<10;i++) {
numeros[i] = i;
}
for(i = 0; i<10;i++) {
printf("%d\n", numeros[i]);}

aqui estas asignando a cada variable del vector un numero, la "i" se usa como indice.

Aqui imprimiria

0
1
2
3
4
5
6
7
8
9


Bueno, explicacion perra de vectores. Alguna duda me dices y explico algo mejor, o mas completo.

Un saludo y espero haber sido de ayuda.
Te faltó una cosa fox, lo del vector también puede ser una constante:

const int N=10;

int main()
{
int numeros[N], i;

for(i = 0; i {
numeros[i] = i;

cout << numeros[i];
}


Eso tambien imprimiria del 0 al 9.


Saludos.
Bueno, eso es que no lo sabia, aunque quizas usaba macros en ese caso, pero bueno, siempre es bueno mas info
Muchísimas gracias...

Dentro de 1 mes tengo que entregar mi primer juego en C... Jumping Cube!! ([agggtt])

Ya me pasaré por aquí para que me echeis un cable XD

Fdo- An0n1m0
Fox escribió:Bueno, eso es que no lo sabia, aunque quizas usaba macros en ese caso, pero bueno, siempre es bueno mas info


PD:tu programa no imprime nada XD XD


Ein?, me da que te equivocas... [poraki]
Dinio_Albino escribió:
Ein?, me da que te equivocas... [poraki]


quien ha puesto ese PD? no edites citas [poraki]

Fuera coñas editeras,xD. Cualquir duda anonimo nos dices ;).


Un saludo.
s4ur0n,Fox,Blame,zheo , muchas gracias por vuestra ayuda.

Un saludo, volvere a daros la brasa poruq etengo que ponerme a estudiar C como sea que el examen se acerca .... [buuuaaaa]
Tengo una pequeña duda de un programa en C, tengo que hacer un programa que lea numeros consecutivos por el teclado y finalice cuando se introduzca uno mayor que la suma de los dos anteriores, y después que se escriba en pantalla el numero de introducciones y los tres valores que cumplieron la condicion.

Estoy bastante perdido, es uno de los ejercicios del examen, los otros sin problemas, pero este no lo doy sacado, alguien me puede ayudar?
Bueno, esto se puede hacer con un bule while o do while, y le pones un if como filtro para ver si el numero introducido es mayor que la suma d elos dos anteriores, si es así, pues se para el bucle, y para contar el numero de introducciones pues simplemente con un contador y luego, como los tres valores que cumplen la condicion se supone qu e estarán en tres variables, pues le dices que te visualice las 3 varaibles y ya esta, no se si me he explicado bien, de todas formas yo lo que doy es c/c++ (no c solo) entonces puedo mezclar cosas que no has dado y liarte.

Si tienes más dudas aquí estamos. Saludos.
Ya, pero el problema son las tres variable, el ejercicio pide que se vayan recogiendo numeros por pantalla hasta que un numero sea mayor que la suma de los dos ultimos, lo que me mata es eso, creo el do while, pero para hacer una suma de ese tipo hago b=a+a (siendo "a" la variable que regoce el numero) y en el while pongo la condicion de que siga el bucle hasta que a sea mayor que b, pero claro, como la suma la hace antes de terminar el bucle, b siempre es mayor que a, y ahí es donde no encuentro la solucion.

saludos y gracias.
dentro del bucle mete un if que se meta en el momento en que mayor y rompes el bucle con un break.
Xflip escribió:Ya, pero el problema son las tres variable, el ejercicio pide que se vayan recogiendo numeros por pantalla hasta que un numero sea mayor que la suma de los dos ultimos, lo que me mata es eso, creo el do while, pero para hacer una suma de ese tipo hago b=a+a (siendo "a" la variable que regoce el numero) y en el while pongo la condicion de que siga el bucle hasta que a sea mayor que b, pero claro, como la suma la hace antes de terminar el bucle, b siempre es mayor que a, y ahí es donde no encuentro la solucion.

saludos y gracias.


Subenos el código fuente a ver si te podemos ayudar, o simplemente copia el código aquí entre las etiquetas [c o d e] aquí el código [/ c o d e] (la palabra code toda junta:P), lo de las etiquetas es para que lo ponga tal y como lo tienes, es decir guarda las tabulaciones, espacios, etc...
Holas
Necesito saber como hacer para que yo al introducir un numero, me imprima en pantalla unos caracteres, por ejemplo:

Le meto el 4 y el me tiene que imprimir: * * * *, si le meto el 7 pues lo mismo pero 7 asteriscos, etc.
Ando mirando por todos lados pero no consigo que lo haga cawento , lo mismo sera muy facil pero no lo veo claro xD

Salu2
Fl1pa0 escribió:Holas
Necesito saber como hacer para que yo al introducir un numero, me imprima en pantalla unos caracteres, por ejemplo:

Le meto el 4 y el me tiene que imprimir: * * * *, si le meto el 7 pues lo mismo pero 7 asteriscos, etc.
Ando mirando por todos lados pero no consigo que lo haga cawento , lo mismo sera muy facil pero no lo veo claro xD

Salu2


Te iba a poner la explicación pero como era fácil lo he hecho entero por si la cagaba :Ð :

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int i,num;
   
    cout << "mete numero:";
    cin >> num;
   
    for(i=0; i<=num; i++)
        cout << "*";
       
    cout << "\n\n";
       
    system("PAUSE");
    return 0;


Saludos.

EDITO: Se me olvidó poner lo que hacía. El programa pide un número por teclado y despues visualiza tantos asteriscos como el número introducido indique.
Xflip escribió:Ya, pero el problema son las tres variable, el ejercicio pide que se vayan recogiendo numeros por pantalla hasta que un numero sea mayor que la suma de los dos ultimos, lo que me mata es eso, creo el do while, pero para hacer una suma de ese tipo hago b=a+a (siendo "a" la variable que regoce el numero) y en el while pongo la condicion de que siga el bucle hasta que a sea mayor que b, pero claro, como la suma la hace antes de terminar el bucle, b siempre es mayor que a, y ahí es donde no encuentro la solucion.


Se me ocurren dos formas:
1º insertas los primeros tres valores en las tres variables (por ejemplo A B C. aqui puedes incrementar otra que indique el numero de introducciones en 1) y luego haces un while comprobando que C sea menor o igual que A+B. dentro lo que haces (suponiendo que aun no se cumple C>A+B) es copiar el valor de B a A, de C a B y luego pides el proximo numero para C y al final vuelves a incrementar el numero de introducciones. Fuera del while, cuando ya se he cumplido lo que se pedia, simplemente sacas por pantalla lo que haga falta.
2º Este es más avanzado, con listas. creas una lista y vas metiendo valores de manera que cuando haya tres entonces comience a comprobar lo de antes, mientras no se cumpla se utilizan las funciones propias de una lista que son la de quitar el primer numero y la de insertar nuevo numero al final, lo demas viene a ser igual.
Dinio_Albino escribió:Te iba a poner la explicación pero como era fácil lo he hecho entero por si la cagaba :


--------------------------------------------------------------------------------#include
#include

using namespace std;

int main()
{
int i,num;

cout << "mete numero:";
cin >> num;

for(i=0; i<=num; i++)
cout << "*";

cout << "\n\n";

system("PAUSE");
return 0;
} --------------------------------------------------------------------------------


Saludos.

EDITO: Se me olvidó poner lo que hacía. El programa pide un número por teclado y despues visualiza tantos asteriscos como el número introducido indique.


Joder era facil xD, mira que no caer en el "for"...
Gracias

Salu2
una tonteria mu basica... en c como se utilizan los "go to"
digamos que estoy en un punto del programa y quiero volver a una parte anterior( o adelantar). muchas gracias

y otra cosilla, si en un punto quiero terminar el programa como seria?? exit simplemente?
para los goto necesitas una etiqueta, por ejemplo


main()
{
goto Aqui;
printf("Esto no se imprimira");
Aqui:
printf("Aqui fue a parar el goto);
}

si te fijas va a la etiqueta que le dijiste, en este caso "Aqui".

Quizas la cago en algo pero "goto" no se usa, esta en deshuso, mejor usa funciones
ya lo de las funciones seria ideal, en linux eran fijas, pero es que en c aun no las he dado y las veces qe lo he intentado por mi cuenta me hago un lio y no me terminan de salir
muchas gracias [beer]
Lo único díficil de entender en la funiones son los parámetros, y tabiem si son de entrada,entrada/salida o salida, lo demás es código como si fuera un programa normal.

Saludos.

PD: Y si, el goto ya no se usa, de echo los preofesores ni la recomiendan, porqque según ellos es una instrucción mal hecha o algo asi.
El Goto no se usa simplemente y llanamente porque se carga la programacion estructurada ya que saltas de un lado para otro .

Un saludo.
El goto deberías casi casi olvidarte de que existe en C.

Recuérdalo sólo cuando veas código ajeno.
A ver una duda que tengo con c++ y estoy hecho un lio con las cadenas.

Tengo un archivo, el cual leo linea a linea, ahora lo que necesito es saber como localizar en esa linea, por ejemplo el caracter { o el conjunto de caracteres << o cualquier identificador. ¿Como lo hago? me estoy volviendo loco, vengo de java y alli e smas facil o eso creo XD

Y otra duda, al leer las lineas hago esto:

char cad [1000]
while(!in.eof())
     {
      in.getline(cadena,1000);


Si la linea tiene mas de 1000 caracteres no saldrá no? como controlar eso?

Un saludo
Pues para encontrar un carácter en una cadena: un señor bucle o usar string y sus métodos: http://www.msoe.edu/eecs/cese/resources/stl/string.htm

Saludos
Hola a todos, k tal? un problemilla k tengo en mi primera toma de contacto con C, es la primera practica k tengo k entregar [beer] , y no tengo mu claro lo de leer desde linea de argumentos, leo los argumentos k kiero con el puntero *argv, y luego este puntero lo copio a otro puntero "char *p".
Ahora tengo k tener en cuenta k si alguien introduce "-I", debo meterlo en una variable.
Entonces lo he hexo asi, pero me da un error muy raro, al ejecutar el programa me sale una lista inmensa con todos los archivos conocidos por linux [+risas] . Bueno, esto he hecho:


      
      if (*p=='-'){
         if(*++p=='I'){
            char *PunteroDirectorio=(char*)malloc (sizeof(char*));
            for (++p ; p!='\0';++p,++PunteroDirectorio){
               PunteroDirectorio=p;
               printf ("%s", PunteroDirectorio);
            }
            printf ("%s",PunteroDirectorio);
            
            
         }
         else{
            fprintf (stderr," %s" ,"Argumento no valido\n");
            exit(0);
         }
      }
      else{
         NombreArchivo=*argv;
      }


Como se podría corregir? ¿se miran asi los argumentos (-I o -T etc...)?

Muchas gracias Adelantadas..
*argv no es un puntero, es un puntero a punteros. Concretamente es un puntero a cadenas de caracteres, por lo que argv en realidad deberías referenciarlo así (*argv)[i]
zheo escribió:*argv no es un puntero, es un puntero a punteros. Concretamente es un puntero a cadenas de caracteres, por lo que argv en realidad deberías referenciarlo así (*argv)[i]


y ese "i" k es? [jaja]
Un entero que puede tomar cualquier valor comprendido entre 0 y argc-1
;)
Tanke2K2 escribió:
y ese "i" k es? [jaja]

Es al elemento al que referencias
Ej:
c:\>ejecutable 1 x mañana
i=0 ejecutable
i=1 1
i=2 x
i=3 mañana
No era eso exactamente lo que preguntaba, pero igualmente muxas gracias, ya conseguí resolver eso de otra forma. Venga, pronto vuelvo con mas dudas [buenazo] .

Ta luego.
Una dudilla fácil de resolver (creo) de c puro y duro..

La cosa es que quiero hacer una tabla y que los contenidos de esa tabla sean punteros a otras tablas. Imaginaros el caso de que tengo una tabla y a cada posición de dicha tabla le corresponde una tabla de caracteres.

Mi duda es que no sé como definirla. ¿alguna ayuda?
oskuro está baneado por "Utilizar clones para soltar spoilers salvajes en el hilo del horizon: Zero Dawn"
#include

void main()
{
int i;
for (i=0;i<9999999;i++)
cout<<"/t/tFeliz Navidad a Tod@s!!!!!!";

}


[bye]
Supongo que con tabla te refieres a array bidimensional o matriz :)

Vamos a ver, un puntero es como un array unidimensional (un vector)
int *p;

Luego un puntero a punteros es un array en el que cada uno de sus componentes es otro array, luego necesitamos dos indirecciones:
int **p;

Ya tenemos la matriz de dos dimensiones. Si ahora queremos que cada elemento de esa matriz sea OTRA matrizde dos dimensions, lo que queremos es en realidad una matriz de 4 dimensiones:

int ****p;

No se para qué querras una matriz de 4 dimensiones, pero te merece más la pena hacer una abstracción como usar matrices de 2x2 de structs que contengan la otra matriz 2x2 sino va a ser un caos trabajar con 4 niveles de indirección:

typedef struct {

char ** _ptrTabla
} Tabla;

Y hacer :
Tabla ** tablaDosDimensiones;

Así tienes una matriz de dos dimensiones de elementos Tabla, y cada elemento Tabla, a su vez tiene una matriz de dos simensiones de elementos char.

PD: si por tabla te refieres a un array unidimensional, entonces basta con que leas hasta el tercer párrafo. ;)
Hola, yo.. vereis no tengo ni zorra de programacion, he empezado el modulo 2 meses mas tarde de lo normal, asi que os podeis imaginar mi nivel de cacao mental que en 1 mes he intentado sacar 3 asignaturas pero bueno, el caso esque en la que mas perdido estoy es en programacion.

1- en Clase usamos como compilador el Visual Studio Net 2003, pero claro, este programa para programar solo en C como me han dixo es bastante complejo, pero a mi su interfaz, su sintaxis y su sistema de errores es al que estoy acostumbrado y el ke mas facil se me hace de usar porque ya lo llevo usando 1 mes.

Y he aki mi duda, ahora tengo en casa el mismo programa y no soy capaz de poner la pantalla para programar, es decir, desde que se inicia el visual hasta llegar al bloc ese de notas donde empiezas a programar, no se llegar hasta ahi [enfa].

Cree un hilo donde fox y otro chico me dijeron como se hacia pero nada, que me sigue sin llegar hasta ahi, creo un proyecto y el proyecto me sale creado en la parte derecha , pero en la izqda sigo teniendo la pagina de inicio donde pone Nuevo Proyecto y Abrir Proyecto y tal, y ahi deberia de salir el bloc de notas ese. [nop]

Y otra cosa, el visual Studio que yo tengo son 3 Cds + el Msdn Library y por lo que he visto, no tiene C a secas?? ya os digo que yo en el modulo no se como programo porque cuando llegamos ya esta arrancada la ventanita de programar y en teoria es en C porque es lo que tamos dando, pero que ami en el Visual no se me abre ninguna ventanita asi y ademas en los proyectos encuentro de Visual C, de C++ de C# pero no hay ningun Proyecto de C. O es que C es lo mismo que Visual C??

Os dais cuenta del cacao que tengo no?

2- Como he dejao el Visual Studio por imposible, me he bajao un compilador ( gracias Fox) que se llama Dev-C/C++, el programa en si no esta mal, solo que estoy acostumbrado al Studio y no lo entiendo muy bien, ademas de que el sistema de errores no me gusta nada, en el visual cuando tengo algo mal me lo dice y entiendo donde esta el error, pero las formas que tiene este dev no las entiendo para nada, ademas de que me da errores de programacion donde en teoria no deberia ( por ej, poner el { debajo de int main() que en teoria siempre se pone, pos con del dev me da error cawento )

Asi que lo que quiero es a ver si algun alma caritativa que me mande un MP o me de su msn o algo para poder hablar mejor ke por aki, me guie con el visual studio para poder empezar a trabajar en C, muchas gracias y perdon x el toston. salu2.
Alucard me remito al otro post, en el msn te explico en profundidad
Tengo una duda, quiero cambiar el color del fondo y el color del texto
como puedo hacerlo?
Las funciones de consola son dependientes del sistema operativo.
En el caso de Windows:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mslu/winprog/unicode_layer_console_functions.asp
En concreto te interesa la primera ;)
Wola chavales, Una dudilla, por aquii. Necesito saber como puedo hacer un or exclusivo ( xor) para un array de 255 bytes; es decir, tengo 255 bytes y con otro array de ese tamaño haccer un or exclusivo bit a bit entre los dos.

Muchas gracias a los dos
Si los tienes en un array tienes que recorrerlo y hacer un or para cada componente. Posiblemente te resulte más eficiente usar variables y manipularlas bit a bit, asÃ_ el XOR es automático

A = 1001b
B = 1101b

A XOR B = 0100b

La putada es que para cambiar un bit has de usar máscaras, por ejemplo para cambiar el bit más siginicativo de B a uno o cero:

//Ponerlo a cero
B = 1101b
mask = 0111b
B & mask = 0101b

//ponerlo a uno
B = 0101b
mask = 1000b
B | mask = 1101b

Más trabajo pero más eficiente. Por supuesto las máscaras también puedes manipularlas con los operadores de manipulación de bits (~ << >> )
Hola me podeis decir alguna pagina en la q hayan ejercicios de C, desde un nivel bajo-medio¿¿¿
Gracias
En la web del traductor al castellano de Dev-c++ hay ejercicios

http://ledesma.f2o.org/programacion_en_c/

mira a ver si te vienen bien.

Un saludo.
Gracias, creo q me serviran, esq estoy estudiando esto ahora, y el profesor solo nos ha exo hacer un ejercicio, y como no me ponga a praticar voy mas perdido....
Gracias
Podria alguien darme informacion sobre los SNIFFERs, sq tengo q hacer una practica y no tengo ni idea.

Kiero hacerla en VISUAL BASIC o en C++, xo no se por donde empezar; si alguno ha hecho algo sobre SNIFFER q me lo pase al correo, se lo agradeceré eternamente.

Salu2 programadores/as
Hola, mirar estoy con este programa, le e metido el bucle do while, pero en la pregunta del final, cuando pulso la letra c, quiero q repita el programa, pero se me sale del programa, y yo creo q esta bien, a ver si le podeis echar un vistazo. Gracias.


/*Programa para calcular el perimetro y la superficie de un circulo, partiendo del radio*/
#include
#define pi 3.1415
main ()
{
char opcion, repetir;
float radio, resultado;

clrscr();
printf("\n ===================================================================");
printf("\n\n Programa para calcular el perimetro y la superficie de un circulo");
printf("\n\n ===================================================================");
do
{
printf("\n\n\n Si desea calcular la superficie de un circulo pulse [s]");
printf("\n\n Si desea calcular el perimetro de un circulo pulse [p]");
printf("\n\n Pulse la tecla deseada: ");
scanf("%c", &opcion);
printf("\n Introduzca el valor del radio: ");
scanf("%f", &radio);
if (opcion=='s') resultado=pi*radio+radio;
if (opcion=='p') resultado=2*pi*radio;
printf("\n El resultado es igual a:%f", resultado);
printf("\n\n Si quiere realizar otro calculo pulse [c]");
flushall;
scanf("%c", &repetir);
}
while (repetir=='c');
getch();
}
Varias cosas:

clrscr() no es estándar y además por lo general no lo vas a necesitar. No te recomiendo usarlo como norma habitual, y en este caso es totalmente supérfluo.

getch() tampoco es estándar, utiliza getchar().

La función main() DEBE retornar int (y únicamente int). Y si, es el estándar. ;)

¿Adivinas qué pasa con flushall()? Exacto, tampoco es estándar, y a tenor de tú problema no hace lo que pretendes.

Si tu compilador te permite hacer todo eso incluyendo únicamente stdio.h, es hora de que cambies a un compilador que no sea del paleolítico y siga los estándares. Por ejemplo bájate el Dev-C++ que es un entorno que incluye un compilador mucho más actualizado (intuyo que usas TurboC :P)

Por último pasa solucionar tú problema cambia
scanf("%c", &repetir);
por
scanf(" %c", &repetir); //Ojo con el espacio
zheo, que diferencia hay entre poner espacio y no ponerlo? :O

Un saludo.
Lo siento por no ponerlo, estaba algo pillado de tiempo. [noop]

Lo que hace el espacio es que scanf se 'coma' (ignore) los espacios en blanco y saltos de línea que haya en el buffer. Lo leí en un foro y a mi siempre me funcionó, aunque no se si es un comportamiento estándar de scanf, pero mejor eso que andar con fflush(stdout) y flushall(), la primera porque es errónea, y la segunda porque no es estandar ;)

Lo que ahora mismo no te se decir es si los elimina o no del buffer no me acuerdo :( :(
288 respuestas
1, 2, 3, 4, 5, 6