› Foros › PlayStation 3 › Scene
mellon escribió:blipi escribió:@alpha_19_
perdon por no responder tu duda antes, no vi el post. Incluyes antes del "return 0;" algún tipo de pausa, ya sea el getchar(); o el system("pause") explicados en este tuto? De ser así, pasate por el final del capítulo 5, allí tienes el programa al completo. Asegurare que tienes lo mismo.
@mellon
Mira, yo no quiero hacer de esto una guerra, si después de leer mi respuesta sigues empeñado en discutir, mandame un MP y lo hacemos por allí, no quiero desvirtuar el tema del hilo.
1. Te pasa algo conmigo o con que quiera ayudar a la comunidad?
2. Nunca he dicho que saber programar en C implique tener todos los conceptos de C++ aprendidos, he dicho que saber C igual a saber programar en C++, y tampoco he dicho nunca que aprovechando todo su potencial. Eso lo has dicho tu. Si sabes programar en C, sabes programar en C++, y viceversa. Aunque no lo aproveches al máximo.
3. Lo que hace C++ y no C, lo pones porque tu crees que yo no lo se?
4. Y si, temo decirte que todo lo que no hace C y si hace C++ son añadidos a C. Sino, porque comparten todos los archivos de base?
No, no, me parece perfecto esta iniciativa y es por eso que sigo el hilo, sino no me hubiese molestado ni en escribir.
Lo unico que he hecho es puntualizar que C++ es mucho mas que un extension de C, y permite hacer muchas cosas que en C no puedes. Mi descripcion ha sido para dar idea de lo que hablo y para que si ha alguien le interesa pueda buscar mas informacion y pueda contrastar los conceptos que introduce C++ respecto a C.
Respecto a porque comparten librerias es porque C++ esta basado en C y por temas de compatibilidad se incluyen las librerias de C. Un añadido seria lo que han ido aportando los diferentes estandares de C (entre otras muchas cosas, características de C++)
Animo con el proyecto.
Salu2
#include <stdio.h>
#include <stdlib.h>
int main()
{
char texto[11] = "Hola Mundo";
char *punterotexto;
punterotexto = &texto[3];
//%d variables numericas %s cadenas de letras, %x direcciones de memoria
printf ("La 4 letra de %s es %s.\n", texto, punterotexto);
system ("pause");
}
char texto[] = "Hola Mundo";
for(int i = 0; i < strlen(texto); i++){
if(*texto)
printf(*texto++);
}
while(*texto)
printf(*texto++);
#include <stdio.h>
#include <stdlib.h>
int main(void){
char texto[11] = "Hola Mundo";
//%d variables numericas %s cadenas de letras, %p <-------- direcciones de memoria
printf ("La 4 letra de %s es %p.\n", texto, &texto[3]);
system ("pause");
return 0;
}
Del mismo modo que podemos hacer funciones de cualquier tipo, también podemos hacer que una función sea un puntero, por ejemplo:
Código: Seleccionar todo
char *dame_un_texto(){
char *texto = (char*)malloc(11);
strcpy(texto, "Hola Mundo");
return 0;
}
return texto;
return (char *) texto;
En una variable char no puedo puntear la dirección de memoria para mostrarla en pantalla en plan "hola mundo esta en la dirección 0x34fc84" ?
#include <iostream>
using namespace std;
int main(void){
setlocale(LC_ALL,"es_ES.UTF-8");//hay que activar el locale que corresponda
wchar_t c;//widechar
wcin >> c;//versiones wide de cin y cout de toda la vida, están definidas en iostream
wcout << c << endl;
if (L'á' == c){//la L indica que es un carácter largo
wcout << "IGUALES\n";
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char texto[11] = "Hola Mundo";
char *punterotexto;
punterotexto = &texto[3];
//%d variables numericas %s cadenas de letras, %p direcciones de memoria
printf ("La 4 letra de %s es %c.\n y se encuentra en la direccion 0x%p\n", texto, *punterotexto, punterotexto);
system ("pause");
}
#include <stdio.h>
int main(){
unsigned long hexa_1 = 0xAABBCCDD;
char texto[100];
sprintf(texto, "0x%x", hexa_1); //Copiamos en la variable texto el hexa_1
//NOTA: el %x se sustituye por hexa_1, pero no pone el 0x, por eso lo ponemos nosotros delante
//es simple estética, ¡no influye en nada!
printf(texto); //va a mostrar 0xAABBCCDD
getchar();
return 0;
}
aviso: el formato ‘%x’ espera el tipo ‘unsigned int’, pero el argumento 3 es de tipo ‘char*’
#include <stdio.h>
#include <stdlib.h>
int main(void){
void *v;
char s[] = "ABC";
v = s;//<-- esta asignación no requiere casting (ver nota al final) porque se está usando el tipo comodín void*
printf ("%s\n",s);
printf ("%s\n", (char*) v);//<--casting requerido
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void){
void *v;
float *f;//<---preparación de la marranada
char s[] = "ABC";
v = s;
f = (float*) s;//<<--- marranada
printf ("%s\n",s);
printf ("%s\n", (char*) v);
printf ("%s\n", (char*) f);//<--- arreglo de la marranada
return 0;
}
No se si podré escribir nada más hasta dentro de 2 días, pues esta tarde (día 05), me voy con la familia, en el pueblo, para celebrar reyes. Si tenéis (y tengo) suerte xd pillaré el wifi de primo y escribiré algo =P
Seguiré escribiendo, sea mañana o al cabo de 2 días. Espero no ver ningún post de que el tutorial está incompleto.
blipi escribió:@Seahawk
La verdad nunca he trabajado en MAC, pero te puedo asegurar que más difícil no es, ya que es mas de lo mismo, el código no cambia.
Respecto a que IDE utilizar, la verdad yo no lo se, pero en anteriores posts otros usuarios han comentado Netbeans y Eclipse. Échale un ojeada.
Yo de ti no usaría una maquina virtual para esto, esto sí que sería trabajo adicional.
Parece que se me han adelantado =P
@todos
Gracias por vuestros comentarios y animos
blipi escribió:17. Linked list (listas enlazadas)
(18. Pilas, colas) -> Si veo que el nivel está como para hacerlo
Juen escribió:@Seahawk
Al Parecer Xcode es un IDE por tanto no necesitas Netbeans ni Eclipse, ya lo tienes todo.
pom escribió:Juen escribió:@Seahawk
Al Parecer Xcode es un IDE por tanto no necesitas Netbeans ni Eclipse, ya lo tienes todo.
XCode es IDE + compilador (gcc), requiere registro en la Apple Developer (es gratuito).
Pese a que XCode es un IDE excelente no lo veo apropiado para personas que quieren hacer pruebas simples en C, y por tanto no puedo recomendarlo. En cualquier caso resulta esencial para tener una toolchain de GCC, ya que es necesario instalar el paquete que incluye el XCode (además en un futuro al que quiera le permitirá a su vez instalar "fink" y "macports", muy utiles para obtener otros paquetes de uso comun).
Para los principiantes recomiendo comenzar con un editor de texto sencillo ( http://sourceforge.net/projects/smultron/ es GPL), si bien no es el más potente por lo menos tiene resaltado de sintaxis y numeros de linea. Vim esta disponible directamente en el OSX, un editor excelente pero que tampoco puedo recomendarlo a quien no lo haya manejado antes (complejidad media-alta).
Para compilar se puede usar un terminal (basta con escribir 'terminal' en spotlight) y en ella las lineas de comando típicas de compilación y ejecucion:
gcc -o helloworld helloworld.c
./helloworld
Aclaro de nuevo, no estoy diciendo que XCode no valga o sea malo (todo lo contrario), pero requiere unos conocimientos mínimos tanto del lenguaje como de compilación/linkado (incluso tiene cosas peculiares que no se dan en otros IDEs, como es el uso de "paquetes framework").
Por otro lado comentaré que instalar la toolchain de PS3 en OSX a diferencia de Linux no es trivial (fallan paquetes al compilar). Llegado el momento si alguien necesita instalar TOOLCHAIN + PSL1GHT podría hacer un tutorial (si es que encuentro tiempo...).
strcat(t2, S);
strcat(t2, t1);
printf ("%s\n", t2);
strcat(t1, S);
strcat(t1, t2);
printf ("%s\n", t1);
#include <stdio.h>
#include <string.h>
void makeText (char *t1, char *t2, char *S){
strcat(t2, S);
strcat(t2, t1);
printf ("%s\n", t2);
}
int main(int argc,char *argv[]){
if (argc != 3){
printf("Uso: Texto1 Texto2\n");
return;
}
if (!strcmp(argv[1], "-c")) makeText(argv[1], argv[2], " ");
return 0;
}
void makeText (char *t1, char *t2, char *S){
strcat(t2, S);
strcat(t2, t1);
printf ("%s\n", t2);
}
int main(int argc,char *argv[]){
if (argc != 3){
printf("Uso: Texto1 Texto2\n");
return; <--- return 0
}
if (!strcmp(argv[1], "-c")) makeText(argv[1], argv[2], " ");
return 0
}
void makeText (char *t1, char *t2, char *S){
strcat(t2, S);
strcat(t2, t1);
printf ("%s\n", t2);
}
int main(int argc, char *argv[]){
if (argc != 3){
printf("Uso: Texto1 Texto2\n");
}else if (!strcmp(argv[1], "-c")){//Condiciones mutuamente excluyentes y uso de corchetes, aunque sea para delimitar una sola instrucción.
makeText(argv[1], argv[2], " ");
}
//Un único punto de salida de la función, ya tendrás ocasión de romper esta regla.
return 0;
}
int main(int argc, char *argv[]){
//una llamada a un ejecutable consta de:
//nombreEjecutable parámetro1 parámetro2 parámetro3 ... parámetroN
//que se corresponden respectivamente con:
//argv[0] argv[1] argv[2] argv[3] ... argv[N]
//el valor de argc no es exactamente el numero de parámetros, sino el número de parámetros + 1
//por tanto como mínimo siempre vale 1, el 1 es por el nombre del ejecutable que como ya te he
//comentado es uno de los elementos de la matriz *argv[]
//Por tanto el valor válido de argc para 3 parámetros es 4, 3 parámetros (-c texto1 text2) y nombreEjecutable
if (argc != 4){
printf("Uso: Texto1 Texto2\n");
}else if (!strcmp(argv[1], "-c")){
makeText(argv[2], argv[3], " ");//Aqui supongo que el primer argumento debia ser argv[2], no 1 (que sera "-c")
}
return 0;
}
aviso: conversión obsoleta de una constante de cadena a ‘char*’
makeText(argv[2], argv[3], " ")
void makeText (char *t1, char *t2, char *S);
char espacio[] = " ";
...
makeText(argv[2], argv[3], espacio);
void makeText (char *t1, char *t2, char *S){
strcat(t2, S);
strcat(t2, t1);
printf ("%s\n", t2);
}
main(){
..
makeText(argv[2], argv[3], espacio);
...
}
#include <stdio.h>
#include <string.h>
void makeText (char *t1, char *t2, char *S){
strcat(t2, S);
strcat(t2, t1);
}
int main(int argc,char *argv[]){
char espacio[] = " ";
if (argc == 5){
printf("ANTES:|%s|%s|%s|%s|\n", argv[1], argv[2], argv[3], argv[4]);
makeText(argv[2], argv[3], espacio);
printf("DESPU:|%s|%s|%s|%s|\n", argv[1], argv[2], argv[3], argv[4]);
}
return 0;
}
ANTES:|AAA|BBB|CCC|DDD|
DESPU:|AAA|BBB|CCC BBB|BBB|
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void makeText (char *t1, char *t2, char *S){
int longitudTotal = 0;
char *cadenaFinal;
//primero se calcula el tamaño de la cadena
longitudTotal += strlen(t2);
longitudTotal += strlen(t1);
longitudTotal += strlen(S);
//se reserva el espacio necesario
cadenaFinal = (char*) malloc (sizeof(char) * (longitudTotal + 1));//+1 debido a que hay que dejar espacio para el caracter terminador
//se monta la cadena
cadenaFinal[0] = '\0'; //para indicar que la cadena esta vacia, el terminador como primer elemento
strcat(cadenaFinal, t2);
strcat(cadenaFinal, S);
strcat(cadenaFinal, t1);
printf ("%s\n", cadenaFinal);
//se libera la memoria reservada
free(cadenaFinal);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void makeText (char *t1, char *t2, char *S){
int longitudTotal = 0;
char *cadenaFinal;
longitudTotal += strlen(t2);
longitudTotal += strlen(t1);
longitudTotal += strlen(S);
cadenaFinal = (char*) malloc (sizeof(char) * (longitudTotal + 1));
sprintf(cadenaFinal, "%s%s%s", t2, S, t1);
printf ("%s\n", cadenaFinal);
//se libera la memoria reservada
free(cadenaFinal);
}
void makeText (char *t1, char *t2, char *S){
strcat(t1, S);
strcat(t1, t2);
printf ("%s\n", t1);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char *argv[]){
/*Verificación de argumentos*/
if (argc != 3 && !strcmp(argv[1], "-c")){
printf("Uso: Texto1 Texto2\n");
} else {
/*Creacion e impresion de cadena*/
int l = strlen(argv[1]) + strlen(" ") + strlen(argv[2]);
char *cadena = (char *) malloc(sizeof(char) * (l + 1));
if (!strcmp(argv[1], "-c")){
sprintf(cadena, "%s %s", argv[1], argv[2]);
printf("Cadena: \"%s\" Tamaño: %i\n", cadena, sizeof(cadena));
}
}
return 0;
}
[-c | \0 | T | e | x | t | o | 2 | \0 ]
^ ^
argv[1] argv[2]
[-c | _ | \0 | e | x | t | o | 2 | \0 ]
^ ^
argv[1] argv[2]
void makeText (char *t1, char *t2, char *S){
strcat(t1, S);
strcat(t1, t2);
for (int i=0; i<20; i++){//20, por poner algo
printf("%c", t1[i]);
}
printf("\n");
}
|45|99|0 |84|101|120|116|111|50|0|83|83|72|95|65|71|69|78|84|95|
|45|99|32|0 |101|120|116|111|50|0|83|83|72|95|65|71|69|78|84|95|
# include <stdio.h>
# include <stdlib.h>
int main (){
printf ("Escribe el valor del primer numero");
int var1 = getchar ();
printf ("Escribe el valor del segundo numero");
int var2 = getchar ();
int suma;
suma = var1 + var2;
char valorsuma [100];
sprintf (valorsuma, "La suma de los dos numeros es: %d", suma);
printf (valorsuma);
system ("pause");
return 0;
}
dracojcs escribió:Muchas gracias por el tuto, soy nuevo con esto del C, he programado algo en Visual Basic, pero hace mucho tiempo que no toco nada, y me he ido olvidando, soy un paquete, empiezo de cero!
Estoy intentado la función para... "Imaginarios que os viene un empresario y os dice que quiere una función tipo "int", con 2 parámetros int, que la función sume esos parámetros, y devuelva el resultado."
De la forma que esta planteado, parece que debe recoger los parámetros por teclado y sumarlos, le he intentado con este código pero da error:# include <stdio.h>
# include <stdlib.h>
int main (){
printf ("Escribe el valor del primer numero");
int var1 = getchar ();
printf ("Escribe el valor del segundo numero");
int var2 = getchar ();
int suma;
suma = var1 + var2;
char valorsuma [100];
sprintf (valorsuma, "La suma de los dos numeros es: %d", suma);
printf (valorsuma);
system ("pause");
return 0;
}
Como se usa getchar (), cual es el problema?
Otra dudilla, ya que estoy... como se escriben los caracteres acentuados y caracteres especiales? Es igual que en HTML, hace falta indicarle al Visual C++ el formato en las propiedades del proyecto, o algo así?
Gracias y saludos!
int numero_letra = getchar();
char buffer[1] //considerando que solo se va a teclear una vez, es suficiente con 1, pues es solo 1 letra
sprintf(buffer, "%c", numero_letra); //Ahora buffer tiene la letra
int numero = atoi(buffer);
//atoi convierte una cadena de texto en numero, si la cadena era "2", ahora numero = 2;
//Nota: si la cadena fuera, por ejemplo, "a", obtendriamos que numero = 0
int num = getchar();
char buffer = (char)num;
int numero = atoi(&buffer);
#include <stdio.h>
int main() {
int numero = 10;
char texto[30] = "d%ds";
printf(texto, numero);
getchar();
}
#include <stdio.h>
int main() {
int numero = 10;
char texto[30];
sprintf(texto, "d%ds", numero);
getchar();
}
kinbi escribió:Primero, muchas gracias por el tuto, siempre que querido aprender a programar más allá de basic y el Qbasic, xDDD, me lo voy a tomar muy en serio a ver si consigo hacer algo, lo que sea para mi psp.
Lo segundo, estoy practicando con la primera lección, el hola mundo, y creo que tengo algún problema con printf y sprint por que si hago esto:#include <stdio.h>
int main() {
int numero = 10;
char texto[30] = "d%ds";
printf(texto, numero);
getchar();
}
Funciona, me sale el texto "d10s", que es lo que pretendo, pero si escribo#include <stdio.h>
int main() {
int numero = 10;
char texto[30];
sprintf(texto, "d%ds", numero);
getchar();
}
Solo me sale la consola esperando a que de el intro sin ningún tipo de texto..
Por lo que he entendido, sprintf te permite definir la variable a continuación de mandarla imprimir, pero a mi no me sale.
Por favor, decidme si voy por buen camino.
Saludos.
dano88 escribió:kinbi escribió:Primero, muchas gracias por el tuto, siempre que querido aprender a programar más allá de basic y el Qbasic, xDDD, me lo voy a tomar muy en serio a ver si consigo hacer algo, lo que sea para mi psp.
Lo segundo, estoy practicando con la primera lección, el hola mundo, y creo que tengo algún problema con printf y sprint por que si hago esto:#include <stdio.h>
int main() {
int numero = 10;
char texto[30] = "d%ds";
printf(texto, numero);
getchar();
}
Funciona, me sale el texto "d10s", que es lo que pretendo, pero si escribo#include <stdio.h>
int main() {
int numero = 10;
char texto[30];
sprintf(texto, "d%ds", numero);
getchar();
}
Solo me sale la consola esperando a que de el intro sin ningún tipo de texto..
Por lo que he entendido, sprintf te permite definir la variable a continuación de mandarla imprimir, pero a mi no me sale.
Por favor, decidme si voy por buen camino.
Saludos.
Sprintf no imprime nada por salida estándar. Si quieres que se imprima algo por la salida estándar tienes que colocar luego un printf.
kinbi escribió:Lol, entonces supongo que sprinft tendrá alguna gran utilidad más adelante por que si no, menuda castaña.
Ya funca. Ahora voy a hacer pruebas con arrays a ver si tengo claro los conceptos.
Saludos y muchas gracias a todos.