C/Visual C - Problemas usando char o leyendo cadenas en C

   
Vista:

Problemas usando char o leyendo cadenas en C

Publicado por Robert (8 intervenciones) el 01/02/2015 07:30:35
Hola,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdlib.h>
 
/*
Datos de entrada: Tipo de vehículo (Camión ó Automóvil), Número de pasajeros, Hora de alta congestión o no
Datos de salida: Tarifa a cobrar
*/
 
int main()
{
    //Declaración de variables
    char lcTipoVehiculo[10], lcHoraAlta[3];
    int liNumeroPasajeros;
 
    //Entrada de datos
    printf("Ingrese tipo de veh%cculo (Cami%cn %c Autom%cvil): ", 161, 162, 162, 162);
    scanf("%s", lcTipoVehiculo);
 
    printf("N%cmero de pasajeros: ", 163);
    scanf("%d", &liNumeroPasajeros);
 
    printf("Hora de alta congesti%cn (Si %c No): ", 162, 162);
    scanf("%s", lcHoraAlta);
 
    //Procesamiento
    if (lcHoraAlta == 'SI' || lcHoraAlta == 'si' && lcTipoVehiculo == 'AUTOMOVIL' || lcTipoVehiculo == 'automovil' && liNumeroPasajeros >= 3)
    {
        printf("\nN%c paga peaje.\n", 162);
    }
 
    else if (lcHoraAlta == 'SI' || lcHoraAlta == 'si' && lcTipoVehiculo == 'AUTOMOVIL' || lcTipoVehiculo == 'automovil' && liNumeroPasajeros < 3)
    {
        printf("\nTarifa: EUR$30.\n");
 
    }
 
    //Salida de datos
 
    return 0;
}

El problema es que al ingresar los datos, el programa se detiene y no comienza a leer ninguna condicion.

Tengo problemas usando char, con el %s y el %c. No entiendo bien la diferencia y también con: char lcTipoVehiculo[10], lcHoraAlta[3];, no sé exactamente que número debo poner.

Espero puedan ayudarme con esto, quiero aclarar mis dudas usando char.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problemas usando char o leyendo cadenas en C

Publicado por Alejandro (12 intervenciones) el 01/02/2015 23:06:14
Mira, %c funciona para leer o imprimir un solo caracter. Mientras que %s sirve para candenas de más de un carácter.
Para hacer un if usando cadenas normalmente se usa: strcmp; un ejemplo.

1
2
3
4
5
6
7
char cadena[6] = "hola";
if(strcmp(cadena, "hola") == 0) {
    printf("coinciden\n");
}
else {
    printf("no coincide\n");
}

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas usando char o leyendo cadenas en C

Publicado por Robert (8 intervenciones) el 01/02/2015 23:11:29
Hola,
entonces para aclarar algo.

No se pueden hacer validaciones de cadenas con la forma que yo estaba usando?.
Quiero aclarar el conocimiento sobre eso.

2. Habría otra forma de hacer validaciones de cadenas sin usar strcmp?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Problemas usando char o leyendo cadenas en C

Publicado por Alejandro (12 intervenciones) el 01/02/2015 23:54:22
De la forma en la que lo estabas haciendo no. Con las comillas simples ( ' ) sólo puedes comparar un solo carácter. Ejemplo

1
if(caracter == 's') //solo un carácter, no varios 

2.-Otra forma sería usando while, pero sería un proceso más largó. Y si no me equivoco strcmp es el único y más eficiente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas usando char o leyendo cadenas en C

Publicado por Robert (8 intervenciones) el 01/02/2015 23:57:13
Ya veo.

Y si quiero hacer condiciones con cadenas, cómo le hago?.

Ejemplo:

char Nombre;

if (Nombre == algo....)

quiero que el usuario digite la palabra, y no poner nombre = pedro.

Cómo sería?

Gracias de antemano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Problemas usando char o leyendo cadenas en C

Publicado por Alejandro (12 intervenciones) el 02/02/2015 00:20:22
Para ello puedes usar scanf o fgets. Pero debes tener cuidado cuando usas scanf, ya que dicha función tiene problemas con los espacios en blanco, no los procesa bien. Más aparte, también es un problema estar limpiando el buffer cada vez que usamos esa función. Así qué, yo te recomiendo que uses fgets, no causa problemas y es sencillo de usar. El único pequeño inconveniente con esta función, es que sí ingresas datos numéricos y quieres hacer operaciones con ellos, tendrás que convertir la cadena a numérica usando atoi o atof.

Un ejemplo con fgets
1
2
3
4
5
6
7
8
char nombre[15];
/* en ocasiones será necesario usar memset para limpiar la cadena antes de ingresar datos*/
//memset(nombre, 0, 15);
 
printf("nombre: ");
fgets(nombre, sizeof(nombre), stdin);
 
//después de ingresar los datos haces las condiciones con strcmp o cualquier otra cosa que vayas hacer

Algo que se me olvidó mencionar, es que cuando los datos sean tipo int o float no debes usar strcmp

if(tipo_int == 10) //sólo esto

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar