2 dudas rápidas de C

0buS

Hola,
os expongo 2 dudas rápidas:

Como hago para incluir en el IF que si hab no es ni I/i ni D/d salte el error?
Porque asi como lo tengo me compila y tal, pero no funciona bien.

 if (noches<0 || hab!='I' || hab!='D' || hab!='i' || hab!='d') printf("\nERROR: Datos incorrectos.\n");
    else
    {
        ....
....

...
    }     

Y otra cosa, en este switch, me da error en las variable cadColor, que la declaré como char cadColor[15]. Me dice que hay una incompatibilidad. Como almaceno esas cadenas en la variable cadColor?

switch (color)
          {
                 case 'A':
                      cadColor='AZUL';
                      break;
                 case 'R':
                      cadColor='ROJO';
                      break;
                 default:
                      cadColor='NO CODIFICADO';
                      break;
          }
elkaoD

De la segunda duda, strcpy es tu amigo.

Sobre la primera, pues no sé, debería funcionar... Haz un printf a ver que contiene 'hab' no sea que tenga valores raros que no te esperas. 'hab' es un char ?

Gnos1s

Cambia OR por AND. De esta forma compruebas que es distinto de todos los valores.

Si es distinto de cond1 Y es distinto de cond2 Y .... Y es distinto de condN ... entonces error.

elkaoD

Ah coño, no me habia fijado en que eran ORs. En efecto, ese es el fallo.

0buS

Si, ya descubrí lo de los AND xDD. Fallo tonto.

Sobre el switch, que quieres decir elkeaod¿?

Lb

que utilices la funcion strcpy para meter las cadenas en arrays o trabajes con string

Gnos1s

#6 En C no hay clase String.

Usa strcpy.

dr_Rouman

strcpy(cadenaDestino, cadenaFuente);

#6 Strings en C? Que yo sepa eso es una clase de la STL y para C++

Para #1 en general:

http://www.cppreference.com/

Ahí te vienen todas las funciones que tiene C y C++ con ejemplos, como por ejemplo strcpy

Riu

BO

modena

A ver, en la 2º duda, no puedes meter AZUL entre comillas simples, porque son para caracteres, tienes k meterlas en comillas dobles.

B

#7

En C no existen clases directamente xD.

#1 Si es un String o char[] , tiene que ir entre comillas dobles " ", las comillas simples son para un unico caracter.

cabron

#10:

Aparte de que respondes a algo ya respondido, respondes mal.

Aunque pusiese comillas dobles seguiría siendo incorrecto, ya que en C no existe el tipo string, las cadenas son arrays de char. Una asignación de una cadena literal a una array char solo se puede hacer si inicializas la cadena al declararla.

Correcto:

int main()
{
char cadena[50] = "hola Caracola";

return 0;

}

Incorrecto:

int main()
{
char cadena[50];

cadena = "hola Caracola";

return 0;

}

strcpy es la solución, que por cierto ya se la han dado.

JuAn4k4

El primero seria con ands salvo las noches, no ?

if (noches<0 || ( hab!='I' && hab!='D' && hab!='i' && hab!='d' ) )

#12 Y esto creo que tb era correcto.

char *hola

hola = "hola Caracola" ;

cabron

#13:

Son dos cosas diferentes

char *s;

s ="Hola";

Es correcto, por que lo que haces es crear un puntero, y luego meter en ese puntero la dirección de memoria de "Hola". Cuando escribes una cadena literal, el compilador pone esa cadena en una zona de memoria de solo lectura, y aunque no se puede modificar, si se puede leer, por lo tanto es una operación válida asignar la dirección de memoria de una cadena literal a un puntero.

Sin embargo esto:

char s[50];
s = "Hola";

te crea un array de char, y estás intentando cambiar la dirección de memoria a la que apunta el primer elemento del array, a la dirección de memoria en la que se encuentra la cadena literal "Hola", y eso no es legal en C.

modena

#14 Weno perdoneme... xD ka ce ya mas de un año k no doy C y se me va la pinza xD

Usuarios habituales