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

Duda programa sencillo en C

Estas en el tema de Duda programa sencillo en C en el foro de C/C++ en Foros del Web. Hola a tod@s, tengo la siguiente duda, quiero hacer un pequeño programa en C, que solicite al usuario una respuesta, y según ésta, hacer una ...
  #1 (permalink)  
Antiguo 11/09/2013, 08:06
Avatar de alejandcc  
Fecha de Ingreso: diciembre-2011
Ubicación: Plasencia
Mensajes: 54
Antigüedad: 12 años, 4 meses
Puntos: 1
Duda programa sencillo en C

Hola a tod@s, tengo la siguiente duda, quiero hacer un pequeño programa en C, que solicite al usuario una respuesta, y según ésta, hacer una condicion o no hacerla.
Este es el codigo:
__________________________________________________ __________

#include <stdio.h>
#include <strings.h>

int main(){

char respuesta[][5]={"s","n"};

printf("quieres mostrar la tabla de multiplicar del 2?(s/n)");

scanf("%s", &respuesta);

if(respuesta == "s"){

printf("2 X 1 = 2");
........
....;
}else{
printf("has elegido que no");
}
}


__________________________________________________ ______-

Este es el codigo, pero me da error, dice algo asi como que no podemos comparar
dos varibales diferentes, sabes como podria hacerlo ???
Gracias
  #2 (permalink)  
Antiguo 11/09/2013, 12:04
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Duda programa sencillo en C

Estas comparando direcciones de memoria, eso nunca funcionará.

Para comparar cadenas (char[]) se usa strcmp:

Código C:
Ver original
  1. if (strcmp(cadena,"hola") == 0)
  2. {
  3.    printf("Las cadenas son iguales");
  4. }
http://www.cplusplus.com/reference/cstring/strcmp/

No obstante, si solo quieres comparar una letra te basta con que cojas la primera letra de la cadena:

Código C:
Ver original
  1. if (cadena[0] == 's')
  2. {
  3.    // tal y tal...
  4. }

Importante recalcar que usamos comillas simples (') para referirnos a letras y comillas dobles (") para referirnos a cadenas.
  #3 (permalink)  
Antiguo 12/09/2013, 00:52
Avatar de alejandcc  
Fecha de Ingreso: diciembre-2011
Ubicación: Plasencia
Mensajes: 54
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Duda programa sencillo en C

me dice que la función strcmp solo es valida para c++
  #4 (permalink)  
Antiguo 12/09/2013, 01:05
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Duda programa sencillo en C

Hola alejandcc.

Es un mensaje por demás extraño tomando en cuenta que la función strcmp es de la librería ANSI C y está declarada en string.h ...

¿ Que compilador estas usando ?

Saludos.
  #5 (permalink)  
Antiguo 12/09/2013, 03:39
Avatar de alejandcc  
Fecha de Ingreso: diciembre-2011
Ubicación: Plasencia
Mensajes: 54
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Duda programa sencillo en C

Perdoname, no decia eso, tienes razon, estoy ejecutando este codigo ahora:

#include <strings.h>
#include <string.h>
#include <stdlib.h>
int main(){

int numero;
char ascii[][12]={"cesar","nemesis","juan","fernando"};
char resp1[10];
int compareLimit = 10;
int result;
int i;



printf("quieres ver la tabla ascii(si/no)?\n\n");
scanf("%s", &resp1[10]);
result = strncmp(resp1,"si",compareLimit);

if(result == 0){
http://www.forosdelweb.com/editpost.php?do=editpost&p=4499748

pero no me ejecuta el if, se sale de la condicion, y segun he leido comparando las dos y siendo iguales deberia dar como resultado 0 la variable result.
Mi compilador es GNU GCC compiler

Última edición por alejandcc; 12/09/2013 a las 03:56
  #6 (permalink)  
Antiguo 12/09/2013, 13:10
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Duda programa sencillo en C

Es strcmp, no strncmp
  #7 (permalink)  
Antiguo 12/09/2013, 15:36
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Duda programa sencillo en C

Está bien el uso de strncmp, es lo mismo, solo que más seguro cuando no sabes donde finaliza la variable, aunque el programa es muy redundante.

El problema está en scanf, lo estás utilizando así:
Código C:
Ver original
  1. scanf("%s", &resp1[10]);

Y debería ser así:
Código C:
Ver original
  1. scanf("%s", &resp1);

La razón está que cuando le pasas a scanf la dirección de una zona especifica del string, va a empezar a escribir desde ahí. O sea, &resp1[0] ... &resp1[9] quedaron sin datos, y se guardó en &resp1[10] la letra s, y la i, no se guardó porque escribió en vaya a saber donde en la memoria, ya que no existe &resp1[11]

Como una recomendación, puedes usar mejor
Código C:
Ver original
  1. scanf("%9s", &resp1);

Que es más seguro porque solo tomará 9 caracteres, o
Código C:
Ver original
  1. fgets(resp1, sizeof(resp1), stdin)

Saludos.
  #8 (permalink)  
Antiguo 12/09/2013, 16:15
Avatar de alejandcc  
Fecha de Ingreso: diciembre-2011
Ubicación: Plasencia
Mensajes: 54
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Duda programa sencillo en C

Gracias por la ayuda, he conseguido solucionarlo haciendo lo que comentais, es decir, quitando el [10] de la variable cuando hacemos el scanf.
Veo que este foro funciona muy bien.
  #9 (permalink)  
Antiguo 12/09/2013, 16:43
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Duda programa sencillo en C

guzzano, el & en el scanf sobra (las cadenas ya son una dirreción por sí mismas).
  #10 (permalink)  
Antiguo 12/09/2013, 20:17
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Duda programa sencillo en C

Cita:
Iniciado por amchacon Ver Mensaje
guzzano, el & en el scanf sobra (las cadenas ya son una dirreción por sí mismas).
Sí, pequeño error al copiar y pegar, pero lo más importante es que funciona igual :p

OFFTOPIC: ¿Eres el mismo amchacon de elhacker.net?
  #11 (permalink)  
Antiguo 13/09/2013, 04:08
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Duda programa sencillo en C

En efecto ;)

Etiquetas: int, programa, sencillo, string
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 17:37.