duda programar c

izverg

hola! me han mandado una especie de "proyecto" con tal que aparezcan algunas variables ... esto es lo que he hecho y no se xq no funciona...

http://img138.imageshack.us/my.php?image=errorse4.jpg

porque me dice q es una variable no declarada? si en teoria no es una variable sino un posible valor de N ?

y otra cosa, como se hace para que al final no se cierre el programa si yo no quiero q se acabe, y que salga la opcion de poder elegir otro dia o cerrar?

gracias

pd. lo pregunto aqui porque en los apuntes que nos dan en clase no aparece nada parecido a eso :)

thnx

Josepanaero

Los días de la semana tendrías q ponerlos entrecomillados pq son strings (cadenas de caracteres). Además, N lo has declarado de tipo carácter, y tendría q ser de tipo cadena de caracteres (char[9] (por eso de q el miércoles es el más largo y tiene 9 caracteres) o string).

Además, al hacer el scanf tendrías q cambiar el %c por un %s (pq lo q vas a leer es un string).

Salu2!

LOc0

Lo que tú lees es un carácter ('l', 'm', 'x', 'j', 'v'), ya que así lo has declarado. Entonces en vez de hacer case martes:, tienes que hacer case 'm':

y otra cosa, como se hace para que al final no se cierre el programa si no que si quiero q se acabe, y sino que me salga otro dia?
Explícate mejor.

Salu2 ;)

izverg

coño... q cosas... thnx
pero hay un problemilla
arrbia cuando pongo char[9] me dice syntax error before "["

int main(int argc, char *argv[])
{
char[9] N;
printf ("Que dia quieres? \n");
scanf ("%s",&N);
switch (N)

tb he probado char [9]N y tmpc funciona, sin embargo cuando quito [9] me da el rror de lunes no declarado.

y cuando intento poner string N, directamente no reconoce string y me dice q es una variable no declarada.

y lo d la 2 parte... quiero decir, si miro el horario de lunes, me aparece... pero una vez q haya visto eso, en vez d q se cierre el programa me deje ver horario d otro dia si kiero. sin tener que abrir otra vez el ejecutable para ver otro horario.

thnx

Josepanaero

Perdón, me equivoqué totalmente. Lo que quería decir es q tenías q poner:

char N[9];

Tb se puede hacer poniendo:

string N;

Si usas el string, tienes q poner tb:
#include <string.h>

Y para la última parte, tendrías q meter el case en un bucle while y darle al usuario una opción de salir. O sea, q si escribe el usuario la palabra salir, por ejemplo, que finalice el programa. Eso se haría así

bool ejecutar = true;
while (ejecutar){
// aquí iría el switch y el printf y scanf de antes y tendrías q añadirle una opción al switch tal q así
case "salir":
ejecutar = false;
break;
}

Salu2!

LOc0

Si quieres evaluar una cadena, no te sirve el switch. Necesitarás usar if-elseif encadenados así:


char dia[15];

do
{

printf("\n\tEscribe el dia ('*' para salir): ");

scanf("%s", dia);

if(strcmp(dia, "lunes")==0)
{
//Imprimes el horario del lunes
}
else if(strcmp(dia, "martes")==0)
{
//Imprimes el horario del martes
}
else if()
.
.
.
else if(dia[0]=='*')
{
//Mensaje de despedida
}
else
{
//Esto sería como el DEFAULT del switch
}

}while(dia[0]!='*');

system("pause");

No te olvides de string.h

Salu2 ;)

izverg

debo ser burro o algo pero no consigo que funcione

cuando hago char N[9] , cuando llega a switch me dice esto

10 F:\Info\horario2.c switch quantity not an integer

que quiere decir???

y cuando intento poner string... dice q es una variable no declarada y he puesto el include string.h hasta me he bajado otro string.h xq pensaba q no lo tenia...

alguna solucion??

thnx

izverg

ahora me vuelve a salir string no declarada al igual que N, y esta include string.h :s me estoy volviendo loco y eso q el programa es sencillisimo :S:S:S

smintcs

en vez de string prueba a declarar
char N[12]

es la otra manera de declarar un string

maRc

Para declarar la cadena, mejor hazlo con "char N[9]" que con el string.

Si quieres usar un switch, la variable que le pasas entre parentesis (N), tiene que ser un entero o un tipo compatible (un char, por ejemplo, que no es más que un "entero" de un byte).
Entonces no te queda más remedio que pasarle, o solamente el primer caracter de la cadena (switch (N[0])), pero tendrías que comparar solo este caracter:
switch(N[0])):
case 'l': //el lunes
blablabla;
case 'm': //el martes
...

O hacer como te ha dicho LOc0, pasando del switch y hacer unos if-else anidados.

Y para que te vaya pidiendo varios dias, haz un bucle while.

izverg

cuando lo hago con char me sale lo de

switch quantity not an integer.

y si lo dejo en simple char para hacerlo con "l" "m"

me sale esto
case label does not reduce to an integer constant

LOc0

No es por ofender, pero antes de aprender C no te vendría mal practicar un poco de comprensión lectora. Hace rato que te puse la solución ENTERA y ya se te ha explicado eso varias veces. Un poquito de atención ¬¬...

Salu2 ;)

izverg

gracias de todos modos por la ayuda... pero si te refieres al #6 ahi me pierdo porque hay muxas cosas q no he dado
y prefiero hacerlo yo.

thnx

LOc0

Si lo haces con los nombres de los días, PASA del switch, como ya te expliqué más arriba.

Si optas por las iniciales de los días, entonces:


char dia;

scanf("%c", &dia);

y los case con comillas SIMPLES:

case 'm':

Salu2 ;)

izverg

vale gracias ya funciona, era las comillas simples :)

Namek

para que el programa no se cierre al ejecutarlo, debes poner

#include <stdio.h>
#include <conio.h>
.....
......
printf("\nPulse cualquier tecla para salir...");
getch();
return 1;
}

B

dios, tan dificil es hacer esto:

#include < iostream> //separo el < del i xq si no no sale bien
#include <string>
#include <cstdlib>

using namespace std;

int main() {

string dia;

cout << "Dia de la semana :"
cin >> dia;

switch (dia) {

case "lunes": {

}
case "martes": {
...
}
.
.
.
} // fin del switch

cout << endl << endl;
system("PAUSE");
return 0;
}

y antes de que nadie diga nada, si solo puede ser en C, pues se busca la salida mas facil, y en vez de andar poniendo "lunes", "martes", etc, se pone "l", "m", "x", etc

quedaria:

#include <stdlib>

int main() {

char dia;

printf("Dia de la semana :")
getc(dia); // o como sea, q yo no uso d eso :P

switch (dia) {

case 'l'{

}
case 'm': {
...
}
.
.
.
} // fin del switch

system("PAUSE");
return 0;
}

xq como t pongas con strings tendrias q usar punteros y andar con memoria dinamica y eso es muy muy lioso

pd: para que no se cierre al ejecutarse se pone system("pause") y se acaba antes
pd2: char loqsea[12] esta muy bien, pero si lo llenas con martes, que ocupa 6 espacios, q pasa con los demas? pues q estan llenos de basura y cuando hagas loqsea=="martes" siempre te dara false.
pd3: #16, pa q pones #include <stdio.h> #include <conio.h> si luego no los usas? admas, el conio pa un problema asi solo valdria pa lo d src_clr() o como sea, y pa eso haces system("CLR") (creo q era asi, o igual cls? :S)

smintcs

mete el conio.h para hacer el getc() y q espere a que toques una tecla para salir, de todas maneras con stdlib.h y sistem("pause") queda mas guay

romeo2k

Otra opción más cutre pero perfectamente válida es que le digas que no siga el programa hasta que pulses una tecla con un get char, acto seguido, saldrá de la aplicación :P...

Para lo demás, ya te lo han escrito ;)...

Usuarios habituales