elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Ayuda comparando cadena de caracteres! en: 4 Septiembre 2013, 23:06 pm
Sí, funcionará correcto, pero si escribes 51 carácteres te volverá a pasar lo mismo, te recomiendo que uses char *, y así evitas esos problemas

Ohh Ya veo! No sé muy bien lo de punteros aún ( recien es mi primer ciclo en la Univ. así que recien estoy descrubiendo)
Yo solo sabía que existía 3 formas de hacer cadenas de caracteres , como te lo pongo aquí. No sabía que era correcto poner una cuarta como lo menciono abajo:


Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  
  6. //FORMA 1
  7. char cadena1[30];
  8. cadena1[0]='h';
  9. cadena1[1]='o';
  10. cadena1[2]='l';
  11. cadena1[3]='a';
  12. cadena1[4]='h';
  13. cadena1[5]=' ';
  14. cadena1[6]='m';
  15. cadena1[7]='u';
  16. cadena1[8]='n';
  17. cadena1[9]='d';
  18. cadena1[10]='o';
  19. cadena1[11]='\0';
  20.  
  21. //FORMA 2
  22. char cadena2[]="AQUI OTRA FORMA";
  23.  
  24. //FORMA 3 CUANDO EL USUARIO LA LLENA
  25. char cadena3[100];
  26.  
  27. //FORMA 4:
  28. char cadena4[20]="BLABLABLABLA";
  29.  
  30.  
  31.  
  32. }
  33.  
2  Programación / Programación C/C++ / Re: Ayuda comparando cadena de caracteres! en: 4 Septiembre 2013, 22:13 pm
los arrays no se pueden comparar directamente.

Lo que tu estás haciendo a nivel de código es lo siguiente: comparas la dirección de memoria donde se encuentra "cadena" con la posición de memoria en la que el programa ha almacenado la cadena "hola", dado que dichas posiciones son diferentes el resultado es siempre false.

Para comparar cadenas de caracteres de c usa strcmp, por ejemplo.

Aunque ya que estás incluyendo clases de c++... cambia el char* por un string y entonces la comparación si funcionará porque, al poner

Código
  1. if ( cadena == "hola" )

implícitamente se va a crear un string que va a contener la cadena hola y, después, se van a comparar ambos strings.

Gracias! Usando el strcmp, salio perfecto.

Ahora, tengo una duda aparte, a ver si puedes explicarme el porqué.

Si tengo este código:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  
  6. char letra1[]="AAAAA";
  7. char letra2[]="BBBBB";
  8. char letra3[]="CCCCC";
  9.  
  10. printf("A: %s\nB: %s\nC: %s\n\n",letra1,letra2,letra3);
  11.  
  12. printf("Ingrese la letra D, 5 veces: ");
  13. gets(letra2);
  14.  
  15. printf("\nA: %s\nB: %s\nC: %s\n\n",letra1,letra2,letra3);
  16.  
  17. }
  18.  

Corre bien, pero cuando Ingreso más de 5 veces la "D" .... el gets hace que la cadena letra1 se sobre-escriba. Lo mismo si uso scanf
Pero yo lo he solucionado haciendo esto:
Dándole 50 posiciones a cada cadena. Haciendo esto , ya no se sobre escribe letra1, ( a menos claro que el user ingrese más de 50 caracteres )
Pero, a lo que voy es ... es técnicamente correcto poner algo así? Osea, 50 espacios , el igual a un texto..

char letra1[50]="AAAAA";
char letra2[50]="BBBBB";
char letra3[50]="CCCCC";

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  
  6. char letra1[50]="AAAAA";
  7. char letra2[50]="BBBBB";
  8. char letra3[50]="CCCCC";
  9.  
  10. printf("A: %s\nB: %s\nC: %s\n\n",letra1,letra2,letra3);
  11.  
  12. printf("Ingrese la letra D, 5 veces: ");
  13. gets(letra2);
  14.  
  15. printf("\nA: %s\nB: %s\nC: %s\n\n",letra1,letra2,letra3);
  16.  
  17. }
  18.  


Gracias! Es que recién empiezo y esto fue algo que no me quedo claro.

Saludos!
3  Programación / Programación C/C++ / Ayuda comparando cadena de caracteres! en: 3 Septiembre 2013, 11:37 am
Hola!
No sé si este problema es tan pero tan básico que por eso no lo encuentro ni en la biblia de la Programación en C, ni internet o yo no sé.



Código
  1. //USANDO EL VISUAL STUDIO 12
  2. #include "stdafx.h"
  3. #include <conio.h>
  4. #include <stdio.h>
  5.  
  6.  
  7.  
  8. using namespace System;
  9.  
  10. int main(array<System::String ^> ^args)
  11. {
  12. char cadena[10];
  13. printf("Write Something!: \n");
  14. scanf("%s",cadena);
  15. if (cadena=="hola")
  16. {
  17. printf("Si!");
  18. }else
  19. {
  20. printf("no :(");
  21. };
  22. _getch();
  23.    return 0;
  24. }
  25.  

Lo que quiero hacer ,es que al escribir "hola" el if lo tome como verdadero, pero no lo acepta.
Alguna solución?
Leí algo de strcmp, pero no sé si hay alguna alternativa mejor?

Muchas Gracias de Antemano
4  Programación / Programación C/C++ / Re: Que pasa? en: 8 Julio 2013, 10:18 am
Ocupación no es una cadena sino una variable char  :rolleyes:

Muchas Gracias!
Sí , recién me doy cuenta que el C lo tomaba como una variable , carácter. le puse el [20] y dio perfecto .


La solución ya te la han dado más arriba, pero solo un consejo para que cojas unas buenas costumbres de programación, leete esto y compáralo con tu código.

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Saludos.


Gracias! Lo estaré leyendo todo el día, lastima que no todo uno lo aprende en clases, creo que más es practicando. No habia visto ese manual . :)

Saludos,

5  Programación / Programación C/C++ / Que pasa? en: 7 Julio 2013, 11:20 am
Hola
Alguien podria decirme que pasa? Compila y corre, pero el resultado no es el esperado..me arroja parte de la ocupacion donde deberia poner el nombre :/



codigo:

Código
  1.  
  2. #include<stdio.h>
  3. #include<conio.h>
  4.  
  5. main()
  6. {
  7.      char  nombre[20],ocupacion;
  8.      float sueldo,descuento,neto;
  9.  
  10.      printf("Introduce tu nombre:");
  11.      scanf("%s",&nombre);
  12.  
  13.      printf("Introduce tu ocupacion:");
  14.      scanf("%s",&ocupacion);
  15.  
  16.      printf("Introduce tu sueldo:");
  17.      scanf("%f",&sueldo);
  18.  
  19.  
  20.      descuento=sueldo*0.12;
  21.  
  22.      printf("\nHola %s Tu Descuento es :%.2f\n", nombre,descuento);
  23.  
  24.      neto=sueldo-descuento;
  25.  
  26.      printf("\nTu Sueldo Neto es :%.3f",neto);
  27.  
  28.  
  29.      getch();
  30.      return 0;
  31. }
  32.  

Gracias
6  Programación / Programación C/C++ / Re: Doble declaración? en: 7 Julio 2013, 04:52 am
C++ soporta lo que se llama sobrecarga de funciones, eso permite llamar a la función más adecuada dependiendo del tipo de variable.

C no tiene sobrecarga, por lo que tienes que indicarle tipo de variable (y lo resuelve en tiempo de ejecucion).

Ahhh entiendo, no sabia que C no tenia sobrecarga de funciones, ahora entiendo. En conclusión,  es como teclear dos veces el tipo de variable que entrará .. al inicio y luego el usar el scanf.

Gracias!
7  Programación / Programación C/C++ / Re: Doble declaración? en: 6 Julio 2013, 08:54 am
Esto no es técnicamente correcto. Ahí estás indicando que las variables num, x y result van a utilizarse para manejar números con signo de un tamaño ( generalmente ) de 32 bits.

Es decir, ahí no estás asignando valores, solo reservando memoria para esas variables. De hecho, si haces un printf ... o un cout de cualquiera de esas variables antes de hacer el scanf verás que suelen tener valores extraños... eso es porque la memoria se ha cogido tal cual, sin inicializar.

Debido a que en c y c++ la memoria no se inicializa es necesario hacerlo de forma manual en numerosas ocasiones, como cuando vas a manejar punteros, para evitar resultados extraños.

Con lo cual, en tu programa sólo le das valor a num en la línea 8.

Muchas Gracias por tu explicación eferion, soy algo nuevo en c / c++, hace 3 meses que recién empecé la carrera de Informatica. así que estoy con el bicho de preguntar el por qué de todo :)

Hasta el momento solo he usado c++ ( recién ahora que me adapto a c )

Código
  1.  
  2. int main ()
  3. {
  4.    int numero;       // Aqui indico que numero es un valor entero                          
  5.    cout<<"Introduce numero: "<<endl;
  6.    cin<<numero; // Aqui ya no necesito indicar nada para numero porque ya lo puse al principio
  7.    cout<<"El numero que pusiste fue: "<<numero<<endl;
  8.    getch();
  9.    return 0;
  10. }
  11.  
  12.  

Pero si lo hiciera en c, seria:

Código
  1.  
  2. int main ()
  3. {
  4.    int numero;       // Aqui indico que numero es un valor entero                          
  5.    printf("Ingresa Numero:");
  6.    scanf("%f",&numero)         /* Aqui estoy VOLVIENDO a indicar que numero sera por ejemplo ... un flotante?? esto lo podria poner asi? o como seria?  , esto no ocurre cuando uso "cin" */
  7.    printf("El numero que pusiste fue %f",numero)
  8.    getch();
  9.    return 0;
  10. }
  11.  
  12.  

Ahi es lo que me confunde c y c++
Entendí lo que me dijiste sobre que en el segundo ejemplo cuando escribo "int numero" al inicio, no estoy asignando un valor.... pero cuando uso el cout, si?

Muchas Gracias de verdad por tomarte el tiempo de responder.
Saludos,
8  Programación / Programación C/C++ / Doble declaración? en: 5 Julio 2013, 10:09 am
Hola, hice este pequeño programa, todo corre perfecto, solo que no entiendo bien las partes que señalo a continuación.

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main()
  5. {
  6. int num,x,result;            /* Aqui estoy indicando que num tiene un valor int*/
  7. printf("Introduce un numero: ");
  8. scanf("%d",&num);       /* Y aqui estoy indicando que num tiene otro valor ("%d") */
  9. for (x=0; x<=12;x++)
  10. {
  11. result=num*x;
  12. printf("\n%d por %d= %d\n",num,x,result);
  13. }
  14. getch();
  15. return 0;
  16. }
  17.  

Siempre he usado cout y cin , pero ahora que quiero usar el printf y scanf, siento que es como si indicaramos que variable es dos veces, al inicio , y cuando se pide luego.

Alguien me podría explicar cual es la lógica para eso? Muchas Gracias!

Saludos,
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines