Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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.
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;
}
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?
perdon por donde pongo getch(), me refiero a getchar()
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.
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.