Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Modificar el valor de una variable

Estas en el tema de Modificar el valor de una variable en el foro de C/C++ en Foros del Web. Hola a todos: Estoy intentando que mi programa cambie el valor de una variable pero me sale una W y el mensaje adicional, miren este ...
  #1 (permalink)  
Antiguo 10/09/2009, 20:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 22
Antigüedad: 14 años, 7 meses
Puntos: 0
Exclamación Modificar el valor de una variable

Hola a todos:
Estoy intentando que mi programa cambie el valor de una variable pero me sale una W y el mensaje adicional, miren este es mi codigo:
Código PHP:
#include <stdio.h>
main(){char ab;
gets(&a);
= ("%s""Hola ", &a);//No se como se hace para cambiar el valor de una variable.
printf("%s", &b);
getch();
return(
0);} 
Se supone que esto debe de imprimir hola + lo que introdusca el usuario.

Gracias de Antemano.
  #2 (permalink)  
Antiguo 11/09/2009, 05:48
 
Fecha de Ingreso: febrero-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Modificar el valor de una variable

Te recomiendo repasar la implementacion de cadenas de caracteres en c.

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void){
  5.     char a[50], b[50]; //a y b deben ser array de caracteres para almacenar una cadena
  6.     gets(a);
  7.     strcpy(b,"Hola ");//Las funciones strcpy y strcat se usan para asignar cadenas
  8.     strcat(b,a);
  9.  
  10.     printf("%s", b);
  11.  
  12. return(0);
  13. }
  #3 (permalink)  
Antiguo 11/09/2009, 12:42
 
Fecha de Ingreso: septiembre-2009
Mensajes: 22
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Modificar el valor de una variable

Gracias!! y medio entendi, solo diganme por que porque no funciona mi code:
Código PHP:
#include <stdio.h> 
#include <string.h>
 
int main(void){
    
char a[0], b[0]; //a y b deben ser array de caracteres para almacenar una cadena
    
gets(a);
    
strcpy(b, ("Hola %s \n",a));//Las funciones strcpy y strcat se usan para asignar cadenas
    
printf("%s"b);
    
getch();
return(
0);

Lo que pasa es que solo devuelve lo que escribe el usuario y no le agrega Hola

Última edición por stilua; 11/09/2009 a las 13:20
  #4 (permalink)  
Antiguo 11/09/2009, 13:28
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: Modificar el valor de una variable

vaya, pero por que no utilizas el ejemplo tal cual te lo dio haidion ???

funciona de manera correcta, tu declaras los arrays como cero cuando deben ser con algun valor, y no estas poniendo las funciones strcpy, strcat por separado.

saludos
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #5 (permalink)  
Antiguo 11/09/2009, 15:51
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Modificar el valor de una variable

A ciegas yo diría varias cosas.
1º) Lo que bien ha dicho Anubis, aunque en estos casos, al estar engoblado en la misma función y hacer la llamada con gets( ), el tamaño del vector no importará y el resultado será el correcto si el resto estuviese bien, pero te va a dar 2 warnings y bien fundamentados en mi opinión... Para eso no declares tan siquiera.
De hecho si cambiamos la línea número 5 del código de haidion por:
char a[0], b[0];
El programa funcionará "igual de bien" que sin la modificación.
2º) Te equivocas en el funcionamiento de strcpy, te recomiendo que cuando no sepas usar una función busques aquí en "C con Clase" (no me está permitido poner links) o te leas la librería de la misma.

Te explico básicamente, strcpy(cad1, cad2) copia cad2 en cad1.
Tu sentencia es "strcpy(b, ("Hola %s \n",a));" La librería string.h se inventó justo por esto, porque igual que no puedes poner a > b, a = b y demás comparadores lógicos entre cadenas, no las puedes concatenar como quieras (y menos aun de ese modo). Bien puedes hacerlo con un bucle si no quieres añadir la librería o bien con el código de haidion.
  #6 (permalink)  
Antiguo 11/09/2009, 16:01
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Modificar el valor de una variable

No, no funciona bien, aparenta hacerlo tal vez pero gets escribe en la pila todo lo que lee del teclado, es decir sobreescribe lo que encuentre a su paso ...

PD. En C/C++ la comparacion es == (= es una asignacion).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 11/09/2009, 16:17
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Modificar el valor de una variable

Cita:
Iniciado por JuanLVBR Ver Mensaje
El programa funcionará "igual de bien" que sin la modificación.
Para eso sirven las comillas que puse, porque es cierto que el resultado obtenido será el mismo pero por una casualidad.
  #8 (permalink)  
Antiguo 11/09/2009, 16:23
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Modificar el valor de una variable

Claro, tenes razon, muy utiles las comillas, que suerte que expliques con precision el problema en cuestion.

"al estar engoblado en la misma función y hacer la llamada con gets( ), el tamaño del vector no importará y el resultado será el correcto si el resto estuviese bien"
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 11/09/2009, 16:31
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Modificar el valor de una variable

Cita:
Iniciado por JuanLVBR Ver Mensaje
A ciegas yo diría varias cosas.
1º) Lo que bien ha dicho Anubis, aunque en estos casos, al estar engoblado en la misma función y hacer la llamada con gets( ), el tamaño del vector no importará y el resultado será el correcto si el resto estuviese bien, pero te va a dar 2 warnings y bien fundamentados en mi opinión... Para eso no declares tan siquiera.

Anda, compila ambos códigos y observa sus resultados, verás como es el mismo:
"al estar englobado en la misma función y hacer la llamada con gets( ), el tamaño del vector no importará y el resultado será el correcto"

"si el resto estuviese bien", qué dominio del castellano y del quote de lo que nos apetece eh. ¿Alguien se ha picado? Pues no era mi intención la verdad, creía que aquí se ayudaba a la gente, no se intentaba "demostrar" nada.

No me interesa discutir contigo sobre niñerías como ésta. El usuario ha sido ayudado, por mí puedes seguir posteando aquí, me siento satisfecho.
  #10 (permalink)  
Antiguo 11/09/2009, 16:33
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Modificar el valor de una variable

Muy simple, el codigo compilable que tiene el tamaño del array definido funcionara con una cadena de digamos por ejemplo 40 caracteres, el otro no, el programa dara una excepcion no controlada y morira. Funciona bien ... no se que dominio se necesita para que el resto sea algo relevante, con hacer esa lectura ya esta mal.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #11 (permalink)  
Antiguo 11/09/2009, 16:37
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Modificar el valor de una variable

¿De nuevo? De ahí las comillas, porque el funcionamiento interno no es el mismo... Por Dios, si lees mi mensaje le aconsejo la otra implementación sin dudarlo... ¿Estás bien?

¿Acaso se controla en el código de haidion una cadena mayor a 50? ¿Acaso se controla en el resto de códigos que la gente pone aquí entradas válidas? ¿Se controla que llegue un char cuando pides un int?

Mete una entrada de tamaño 300 al código de haidion a ver si tienes sorpesa o no... Es evidente, no hay que ser muy listo.

Jajajaj, te gusta editar tus mensajes eh:
Cita:
Iniciado por Eternal Idol Ver Mensaje
Muy simple, mete una cadena larga, el programa dara una excepcion no controlada y morira. Funciona bien ...
Estás hecho un crack.
  #12 (permalink)  
Antiguo 11/09/2009, 16:42
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Modificar el valor de una variable

Podes usarlas tanto como te gusten, esta claro que el usuario que pregunto NO entiende la diferencia. ¿Comprendes ahora que la precision en este caso sirve? ¿Tan dificil te resulta comprender algo tan simple?

Cuando se usan las funciones que se debe usar si, cuando usan librerias como conio.h o funciones como gets no, pero la diferencia es clara en este caso, un array sin tamaño y otro con tamaño, algo que el usuario que pregunto parece no diferenciar. En el caso del array sin tamaño SIEMPRE pero SIEMPRE el programa hara algo incorrecto, en el otro solo cuando se sobrepase el tamaño del array. ¿Llega el mensaje o es muy complejo?

Al parecer no hay que ser muy listo para nada en programacion, ni para saber comparar dos punteros.

Tenes razon yo edito (vos tambien, claro, como agregar codigo editado minimamente) pero tengo un minimo de coherencia:

"No me interesa discutir contigo sobre niñerías como ésta. El usuario ha sido ayudado, por mí puedes seguir posteando aquí, me siento satisfecho."

Asi que aprovecho para editar una vez mas y dar por terminada mi participacion en este hilo, con suerte el usuario comprendera que no es lo mismo ni esta bien hacer eso, que tengas suerte.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 11/09/2009 a las 16:51
  #13 (permalink)  
Antiguo 11/09/2009, 16:52
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Cita:
Iniciado por Eternal Idol Ver Mensaje
Podes usarlas tanto como te gusten, esta claro que el usuario que pregunto NO entiende la diferencia.
Bonito comentario hacia un usuario que plantea una duda, de un usuario que en teoría tiene bastantes mensajes como para tratar a la gente con delicadeza.

Lo más gracioso de todo es que yo desde un principio recomendé la opción que tú recomiendas, pero añadí que la otra daría el mismo resultado, cosa que tú no hiciste, sólo te dignaste a farfullar "buuuu, buuuu, el usuario no sabe, hay que decirle "no uses eso" y listo". Planteo una curiosidad, y esa curiosidad es que ambos casos obtienen el mismo resultado en muchos casos, pero que uno de ellos no está bien hecho.

Estás tan obcecado en tratar de quitarme la razón que hasta compilaste el código erróneo sólo para trastear con él, hallaste cuándo falla, te lanzaste corriendo a postearlo, y el otro código fallaba en exactamente lo mismo, por lo que posiblemente colorado como una manzana desde tu casa, te apresuraste a editar el mensaje para que no te sacase más aun los colores.

Lo que no has tratado de hacer en ningún momento es dar explicaciones coherentes sobre el caso tratado desde un principio, eso demuestra lo que pretendes y no lo que deberías pretender si tus intenciones fuesen las correctas en un foro de estas características.

Y sigues editando... Así no te puedo responder a todo.

Y sigues editando... Así no te voy a responder como es debido... ¿Tan indeciso estás? Respira, cálmate... Ahora, escribe, tranquilo, no vengo a quitarte ningún puesto.

Última edición por David; 15/09/2009 a las 12:14 Razón: Combinar mensajes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:53.