fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

empezar en c

143 Respuestas
16 Usuarios
0 Reactions
120.4 K Visitas
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 18 años

Hola, quisiera que me recomendarais algun programa, gratuito si es posible, para compilar y programar en c, y saber si se puede hacer programas en c, que ademas de escribir texto en pantalla pueda manejar graficos, crear entorno grafico propio y similares (como los entornos graficos de un videojuego) y como se puede programar que se muestren imagenes en pantalla con c. Igualmente agradeceria cualquier referencia a manuales lo mas completos posibles sobre programacion en c, preferiblemente en castellano.

Gracias por cualquier ayuda que me podais ofrecer.

Responder
142 respuestas
luisj
Respuestas: 235
(@luisj)
Estimable Member
Registrado: hace 18 años

El fallo <b>por el que no compila</b> es que te faltaba un punto y coma en la llamada a scanf y otro en el último printf.

Espero que hayas leido lo de los punteros... Despues de la format string que le has puesto, correctamente, la función espera una serie de punteros donde va a ir dejando lo que le sea especificado por teclado. Hasta ahi bien, porque le has dado un puntero a caracter (se envia un puntero a caracter tanto para leer caracteres como para leer cadenas).

¿Qué diferencia tiene entonces leer un caracter por teclado o una cadena de caracteres? ¿Qué cambiarías de tu código para que en vez de leer una cadena leyese un caracter? ¿Simplemente el %s por %c? Piénsalo un rato antes de leer, creo que así se te quedará mejor grabado.

La variable nombre la has declarado como caracter en vez de como array de caracteres (con lo que sólo se reserva espacio para un caracter. Deberías haber declarado "char nombre[100];", por ejemplo.

Por otro lado, ya que en C las cadenas de caracteres son realmente un puntero al primer caracter de la cadena, no hace falta poner "&nombre" en la llamada a scanf, con "nombre" vale.

Leer cadenas de caracteres usando scanf no es una buena idea, pero eso lo dejamos para otra ocasión. Te pasteo el código que funciona en linux:

#include <stdio>
int main(void) {
int e = 1 ;
char nombre[100];
while(e == 1) {
printf("Primer programa en CnnEscribe tu nombre: ");
scanf("%s", nombre);
printf("nHola %s", nombre);
printf("nPulse s para salir del programa o cualquier otra tecla para continuar.nn");
if('s' == getchar()) {
e = 0 ;
}
}
return 0;
}

Responder
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 18 años

Gracias, ahora no se seguro por que la parte en la que escribe lo de pulsar s para salir u otra tecla para continuar salta directamente como si se hubiese pulsado alguna tecla, no se si sera por algun caracter que quede sin leer en scanf o por que pero no deja pulsar alguna tecla para decidir si salir del programa o no.

Si scanf no es buena para leer cadenas, y getch() es mas sencilla que scanf para leer una sola tecla, un solo caracter, ¿entonces cual uso para leer cadenas y cual para leer caracteres y teclas pulsadas?

Responder
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 18 años

perdon por donde pongo getch(), me refiero a getchar()

Responder
luisj
Respuestas: 235
(@luisj)
Estimable Member
Registrado: hace 18 años

Lo mejor es leer las cadenas caracter a caracter, o alguna otra que te permita saber cuantos caracteres vas a leer. Si no tienes control del número de caracteres que lees no sabes si la cadena cabe en el buffer que has reservado, por ejemplo, de 100 caracteres.

Responder
luisj
Respuestas: 235
(@luisj)
Estimable Member
Registrado: hace 18 años

Para que funcione bien lo de la 's' tienes que poner "%sn" en vez de "%s" como format string en scanf porque el ordenador va a esperar a que le des a enter de todas formas. si no a;ades el n se queda en la cola y lo siguiente que lees es <b>siempre</b> eso.

Responder
Página 9 / 29
Compartir: