Título: Ayuda con programa en c Publicado por: yescri en 28 Diciembre 2011, 10:21 am Buenos dias!! Me presento soy un chico de 21 años que he empezado a estudiar grado en ingenieria electrica y me estoy iniciando en esto de la programación. Ya me he estudiado lo basico y mas o menos me se la teoria, pero a la hora de realizar los programas en el pc tengo mas problemas. En este caso estoy haciendo un programa que lea tu nombre y apellidos y los muestre por pantalla, pero me da errores y no se cual es el fallo. Os dejo el programa en si y los errores que me da el compilador habel si me podeis ayudar :P
Programa #include <stdio.h> main() { char nombre[20]; char apellido1[20]; char apellido2[20]; printf("Dime tu nombre\n"); scanf("%s",&nombre); printf("Dime tu primer apellido\n"); scanf("%s",&apellido1); printf("Dime tu segundo apellido\n"); scanf("%s",&apellido2); printf("Tu nombre es %s %s %s", nombre,apellido1,apellido2); } Errores compilador ejercicio4.c: En la función ‘main’: ejercicio4.c:9: aviso: el formato ‘%s’ espera el tipo ‘char *’, pero el argumento 2 es de tipo ‘char (*)[20]’ ejercicio4.c:11: aviso: el formato ‘%s’ espera el tipo ‘char *’, pero el argumento 2 es de tipo ‘char (*)[20]’ ejercicio4.c:13: aviso: el formato ‘%s’ espera el tipo ‘char *’, pero el argumento 2 es de tipo ‘char (*)[20]’ PD: Comentaros que estoy trabajando en ubuntu, que por lo que tengo entendido hay comandos diferentes entre windows y ubuntu. Un saludo programadores y feliz navidad!! ;D Título: Re: Ayuda con programa en c Publicado por: satu en 28 Diciembre 2011, 11:00 am Hola
Primero de todo bienvenido al Foro. El fallo lo tienes en los scanf, ya que cuando vas a leer cadenas no hace falta que pongas el &: Código Por cierto main debe devolver un int Código
Léete esto (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html) Y cuando postees código utiliza la etiqueta GeSHi (cuando escribes la tienes junto al botón de elegir el tipo de fuente) Saludos y felices fiestas!! Título: Re: Ayuda con programa en c Publicado por: yescri en 28 Diciembre 2011, 11:56 am Muchas gracias :laugh: ya funciona perfectamente...
He estado mirando el enlace este que me comentas, y he sacado en conclusion que se puede utilizar el gets pero que no se recomienda, que es mejor utilizar el fgets que así no da errores. No he encontrado donde explica porque has utilizado int main (void) y return 0 al final, quiero decir que no se cual es la función de estos, si no es mucha molestia me gustaria que me lo explicases. Un saludo y gracias de antemano ;) Título: Re: Ayuda con programa en c Publicado por: Caster en 28 Diciembre 2011, 12:04 pm int main (void) es el inicio del programa y return 0; el final.
Además de eso se recomienda que antes de return 0; pongas una pausa para que veas los resultados en pantalla, hay dos opciones: -system("PAUSE") pero esta es horrible(no la uses) -getchar() usa esta Citar 2. "main ()", "void main ()", "int main (void)" no son correctos (el último sería aceptable, pero no suele usarse). http://foro.elhacker.net/programacion_cc/duda_con_variables-t348688.0.html3. "int main (int argc, char *argv [])". Es lo más correcto, pero lo que hay entre paréntesis puede suprimirse si no es usado en el programa. La mejor forma de usar main es: Código
Pero si lo que está entre paréntesis no se va a usar en el programa es mejor no ponerlo: Código
Saludos Título: Re: Ayuda con programa en c Publicado por: yescri en 28 Diciembre 2011, 12:16 pm Muchas gracias demon :) así lo hare.
Título: Re: Ayuda con programa en c Publicado por: yescri en 28 Diciembre 2011, 13:12 pm Otra duda que me ha surgido a la hora de hacer otro programa, la escribo aqui para no abrir otro tema:
Calcular el area de un trapecio a partir de los datos de la base mayor, base menor y altura. Programa Código: #include <stdio.h> int main () { float basemayor,basemenor,altura,area; printf("escriba un valor de la base mayor en metros"); scanf("%f", &basemayor); printf("escriba un valor de la base menor en metros"); scanf("%f", &basemenor); printf("escriba un valor de la altura en metros"); scanf("%f", &altura); area=[(basemayor+basemenor)*altura]/2); printf("el area del trapecio es %f metros\n",area); } y me da el siguiente error: ejercicio9.c: En la función ‘main’: ejercicio9.c:13: error: expected expression before ‘[’ token ejercicio9.c:13: error: expected ‘;’ before ‘)’ token ejercicio9.c:13: error: expected statement before ‘)’ token Haber si me podeis explicar porque cuando declaro area, antes del último printf, si pongo dicha sentencia debajo de la declaración de los float me da otro resultado diferente, es decir, que implica el cambiarlo de sitio. Muchas gracias foreros me estais ayudando mucho :) P.D. No se si estoy utilizando bien el GeShi como me dijo el compañero que tenia que hacer, creo que no lo estoy haciendo bien... Título: Re: Ayuda con programa en c Publicado por: Sagrini en 28 Diciembre 2011, 13:17 pm Código
1. Los corchetes sobran. 2. Lo que hay que hacer es poner el código entre el "[c0de]" y el "[/c0de]" (sustituye el 0 por una o.) Título: Re: Ayuda con programa en c Publicado por: satu en 28 Diciembre 2011, 13:24 pm Código
Te sobra el ) del final :P y a yescri le sigue faltando el return del final :silbar: Saludos Título: Re: Ayuda con programa en c Publicado por: yescri en 29 Diciembre 2011, 13:32 pm ;D si que es verdad que se me ha olvidado el return 0 al final satu.
Respecto a mi pregunta de la declaracion de area supongo que no la habeis visto.En el programa para calcular el area de un trapecio si declaro area antes del último printf me da un resultado diferente que si pongo dicha sentencia debajo de la declaración de los float. ¿Alguien me puede explicar por que sucede esto? Muchas gracias compañeros :) Título: Re: Ayuda con programa en c Publicado por: Caster en 29 Diciembre 2011, 13:34 pm Pon el código que tienes ahora, es que sino no me arreglo ajja
Saludos Edito: Lo mejor es que lo hagas así: Código Te ahorras una variable, líneas de código y no da fallo. Saludos Título: Re: Ayuda con programa en c Publicado por: yescri en 29 Diciembre 2011, 14:16 pm Demon lo que yo me refiero es a esto.
Si pongo el programa de esta manera me da un resultado erroneo. Código: #include <stdio.h> Si lo pongo asi si me sale bien Código: #include <stdio.h> Mi pregunta es: Que implica que lo declare en un lugar o en otro. Espero haberme explicado bien. Un saludo ;) Título: Re: Ayuda con programa en c Publicado por: Caster en 29 Diciembre 2011, 14:20 pm Ni idea ;$
Pero hazlo como te dije yo así no hay error ;D Saludos Título: Re: Ayuda con programa en c Publicado por: yescri en 29 Diciembre 2011, 14:25 pm ;D bueno no pasa nada pero ya es saberlo por intriga.
Haber si algún otro compañero puede echarnos una mano!! :P Gracias programadores por vuestro tiempo ;-) Título: Re: Ayuda con programa en c Publicado por: Caster en 29 Diciembre 2011, 14:37 pm Creo que ya se cual es el error:
Código
Aquí el valor de área siempre será 0 porque la pones antes de introducir los datos, entonces te la acepta porque están declaradas todas las variables y la sintaxis es correcta pero el valor de las variables siempre es 0 por lo tanto el resultado será siempre 0 Sin embargo aquí Código
Le das un valor a "área" cuando ya has introducido los valores de todas la variables y podrá operar correctamente. Espero haberme explicado bien ;) Saludos Título: Re: Ayuda con programa en c Publicado por: 3mp3z@ndo en 29 Diciembre 2011, 14:43 pm Demon lo que yo me refiero es a esto. Si pongo el programa de esta manera me da un resultado erroneo. Código: #include <stdio.h> Si lo pongo asi si me sale bien Código: #include <stdio.h> Mi pregunta es: Que implica que lo declare en un lugar o en otro. Espero haberme explicado bien. Un saludo ;) Lo que implica es que en el primer caso las variables no están inicializadas, y aunque lo estuviesen, por ejemplo a 0, lo que estás haciendo con Código: area=(basemayor+basemenor)*altura/2; es asignarle a area un valor basado en unas variables que todavía no contienen su valor real (el introducido por el usuario), por eso te da error, no importa lo que introduzca el usuario por el teclado, tu ya le has asignado un valor a area ANTES de obtenerlo por el teclado. Y claro, en el segundo caso te funciona porque es exactamnete lo que quieres hacer, preguntas por unos valores, y DESPUÉS de obtenerlos por teclado es cuando le asignas un valor a area, que esta vez se apoya en los valores introducidos por teclado ya que has hecho esa asignación: Código: area=(basemayor+basemenor)*altura/2; DESPUÉS de que las variables obtengan su valor real. Un saludo Edito: Se me adelantó |Demon| mientras te contestaba :P Título: Re: Ayuda con programa en c Publicado por: Caster en 29 Diciembre 2011, 14:45 pm Lo que he dicho yo pero mejor explicado ;)
Saludos Título: Re: Ayuda con programa en c Publicado por: yescri en 29 Diciembre 2011, 14:52 pm ;-) muy bien explicado lo entiendo perfectamente.
Muchas gracias por vuestro tiempo. Ya ire preguntando las dudas que me vallan surgiendo. Gracias a todos un saludo foreros y feliz navidad. Título: Re: Ayuda con programa en c Publicado por: tillizi en 29 Diciembre 2011, 15:04 pm Estimado te aclaro el tema del return que veo que aun te tiene confundido
cuando llamas a una funcion cualquiera como peude ser "main" delante le pones lo que va a devolver y despues le pones lo que se le va a pasar. void quiere decir que no se le pasa nada o que no devuelve nada. EJ: void main() { //estamos llamando a la funcion main la cual no devolvera nada y no se le pasara nada } int main(void){ //estamos llamando a la función main y la misma devolverá un int y no se le pasara nada o sea void. En el cuerpo de este main debe haber un return /o sea devolver algo/ en este caso un int return int; // dicho int puede ser una variable o un numero fijo, por lo general se usa return 0; cuando no quieres devolver nada, es casi como poner void main() //por lo general si ponemos un int o cualqueir otra cosa delante es para devolver una variable que se calcula dentro de la función EJ: return mivariable; } Espero que te sirva esto como guía para aclarar un poco mas el tema. Título: Re: Ayuda con programa en c Publicado por: yescri en 29 Diciembre 2011, 19:16 pm La verdad tillizi que no entiendo muy bien lo que me quieres decir.
Por ejemplo en el programa de antes: Código: #include <stdio.h> Nosotros le vamos a pasar valores, y el programa nos va a dar otro valor. Por lo que he entendido de lo que tu me has explicado tendria que poner Código: int main (int) Me estoy liando un poco la verdad haber si alguien me lo puede explicar de alguna manera que lo entienda Muchas gracias compañeros ;) Título: Re: Ayuda con programa en c Publicado por: Caster en 29 Diciembre 2011, 19:20 pm No te andelantes, no me acuerdo en que post había dicho @Sagrini que la mejor forma de poner main() es esta:
Código
Pero si en el programa no vas a usar lo que está entre paréntesis es mejor que prescindas de ello: Código
Primero aprende sobre lo primero, variables, controladores de flujo(if, switch, while, for) y después las funciones. Saludos PD: Para que lo entiendas rápido, las funciones son "mini-programas" que se van a repetir durante todo el programa principal pero para no repetirlos continuamente se crea una función y se escribe la función en vez del proceso entero. Título: Re: Ayuda con programa en c Publicado por: yescri en 29 Diciembre 2011, 19:23 pm Vale Demon entonces lo estoy haciendo bien asi era como lo estaba poniendo yo siempre sea el programa que sea.
Lo que si me gustaria que me dijeseis es si tengo que poner siempre return 0 al final del programa, o return int o no pongo nada. Saludos Título: Re: Ayuda con programa en c Publicado por: Ferno en 29 Diciembre 2011, 19:26 pm Siempre que declares a la función main adecuadamente como
Código
o Código
vas a tener que retornar un entero! Porque justamente, la declaración de la función lo indica. El "int" antes del nombre de la función es lo que indica lo que si o si debe devolver la función, por ende, en este caso, es necesario retornar un entero. Podés retornar el entero que quieras, pero por convención, el número 0 quiere decir que no hubo problemas con la función! Por ende, siempre se coloca return 0; al final del main. Título: Re: Ayuda con programa en c Publicado por: tillizi en 29 Diciembre 2011, 19:30 pm Mira desde mi punto de vista solo deberias ponerle un
void main(){ } y olvidate de poner return. Yo lo que te queria explicar es que el main es una funcion mas solo que especial de un programa en C. Y como toda funcion en C se le puede pasar un valor o no y puede devolver un dato o no, ya sea un int oun char un float o lo que sea. Título: Re: Ayuda con programa en c Publicado por: yescri en 29 Diciembre 2011, 19:33 pm Dios que lio :rolleyes: ,cada uno teneis vuestro criterio.
Yo voy a poner siempre: Código: int main(){ Si esto esta mal por favor que alguien me corrija Título: Re: Ayuda con programa en c Publicado por: Sagrini en 29 Diciembre 2011, 19:34 pm Por eso es incorrecto usar "void main ()" y "return 0;", ya que son cosas contradictorias (además, da error al compilar). "int" se debe usar siempre con "main ()", pero para otras funciones no, ya que depende de lo que vaya a retornar. Para finalizar con el tema, te recomiendo leas las chinchetas de la sección, especialmente las de "Cosas que no debes hacer en C/C++". Un saludo ;)
Modif1: NO! void main () y return; no son correctos! Leeos las chinchetas! Modif2: Eso sí es correcto, yescri. Título: Re: Ayuda con programa en c Publicado por: Caster en 29 Diciembre 2011, 19:34 pm Haber,
en "int main()" escribe siempre "return 0" eso le indica que el programa ha finalizado, cunado entres en funciones verás que no siempre será un "return 0" tendrás que poner "return + el resultado del mini-programa que te expliqué antes" Yo no ví mucho las funciones en C(sinceramente no las vi, lo que sé es por PHP) Te voy a poner un ejemplo en php: Código
Espero que entiendas todo jeje Saludos Título: Re: Ayuda con programa en c Publicado por: rir3760 en 29 Diciembre 2011, 21:05 pm Solo para aclarar el tópico de la definición de la función principal "main":
Al principio del tema se cita otro donde se indica: Citar 2. "main ()", "void main ()", "int main (void)" no son correctos (el último sería aceptable, pero no suele usarse). Ello no es completamente correcto, explico porque:3. "int main (int argc, char *argv [])". Es lo más correcto, pero lo que hay entre paréntesis puede suprimirse si no es usado en el programa. * El estándar de C indica que la definición de la función principal debe ser una de dos formas: A) Si no se procesan los argumentos pasados mediante la linea de comandos: Código
B) Si ellos se procesan: Código
O alguna equivalente, por ejemplo al utilizar macros (con la directiva "#define ...") o alias (con la palabra reservada "typedef"). También se debe considerar que en una definición los paréntesis vacíos indican "no argumentos" así que "int main() ..." también es valida. Otras formas de definir la función principal pueden ser validas o no (ese es el problema) ya que dependerán del compilador utilizado (este las puede aceptar como una extensión al lenguaje). ---- En cuanto al valor de retorno de la función principal: cuando una función debe retornar un valor (su tipo de retorno no es "void") si este no se indica el resultado es un valor no definido o "basura". Ese es el caso con "main" en el estándar C90. En el estándar C99 aplica lo mismo que en C++: si el valor de retorno de la función "main" no se indica este se toma como cero pero (usualmente) se agrega de todos modos (como una "buena costumbre"). Un saludo Título: Re: Ayuda con programa en c Publicado por: tillizi en 29 Diciembre 2011, 21:07 pm Nunca dije que ponga un void main() y return 0 por que se cae de maduro que poner ambas cosas estas mal.
Por un lado poner void main() estas diciendo que no va a devolver nada la funcion o se que no tienes que poner ningun return en ese main. Si pones int main() vas a tener que devolver un entero ya que es lo que estas diciendo al ponerle el int delante del main que ese main devolvera un int, pero si tu programa no hara ninguna operacion no tiene ningun sentido ponerle que devuelva un 0 cero como estan diciendo, asi que Conclusión: PARA PONER DEVOLVER UN 0 MEJOR PONE QUE NO DEVUELVE NADA. Título: Re: Ayuda con programa en c Publicado por: rir3760 en 29 Diciembre 2011, 21:25 pm Conclusión: PARA PONER DEVOLVER UN 0 MEJOR PONE QUE NO DEVUELVE NADA. Hay dos argumentos para recomendar que, aun cuando no se utilice, se indique el valor de retorno de esa función.El primero es que así el compilador no puede quejarse de la definición de "main", si lo hiciera seria un error del compilador (no del programa). La segunda es mantenerse con las "buenas costumbres", una vez avance en su aprendizaje del lenguaje encontrara la utilidad de retornar un valor (los ejemplos mas conocidos de ello son las aplicaciones utilizadas en scripts). Un saludo |