Tema destacado:
Autor
|
Tema: Ayuda con programa en c (Leído 1,183 veces)
|
yescri
Desconectado
Mensajes: 13
|
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  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!! 
|
|
|
|
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 263
Siempre aprendiendo
|
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 &: scanf("%s", nombre); scanf("%s", apellido1); scanf("%s", apellido2); Por cierto main debe devolver un int int main(void) { ... return 0; } Léete estoY 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!!
|
|
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
yescri
Desconectado
Mensajes: 13
|
Muchas gracias  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 
|
|
|
|
|
En línea
|
|
|
|
Caster
Desconectado
Mensajes: 405
Divide y vencerás
|
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 2. "main ()", "void main ()", "int main (void)" no son correctos (el último sería aceptable, pero no suele usarse). 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. http://foro.elhacker.net/programacion_cc/duda_con_variables-t348688.0.htmlLa mejor forma de usar main es: int main (int argc, char *argv []) Pero si lo que está entre paréntesis no se va a usar en el programa es mejor no ponerlo: int main() Saludos
|
|
|
|
« Última modificación: 28 Diciembre 2011, 12:10 por |Demon| »
|
En línea
|
"Saber que se sabe lo que se sabe y que no se sabe lo que no se sabe, he aquí el verdadero saber." (Confucio)
|
|
|
yescri
Desconectado
Mensajes: 13
|
Muchas gracias demon  así lo hare.
|
|
|
|
|
En línea
|
|
|
|
yescri
Desconectado
Mensajes: 13
|
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 #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...
|
|
|
|
|
En línea
|
|
|
|
Sagrini
Desconectado
Mensajes: 104
Visit las Vegas ;)
|
area=(basemayor+basemenor)*altura/2; 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.)
|
|
|
|
« Última modificación: 28 Diciembre 2011, 17:03 por Sagrini »
|
En línea
|
Un saludo. Sagrini
|
|
|
satu
Desconectado
Mensajes: 263
Siempre aprendiendo
|
area=(basemayor+basemenor)*altura/2); Te sobra el ) del final  y a yescri le sigue faltando el return del final  Saludos
|
|
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
yescri
Desconectado
Mensajes: 13
|
 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 
|
|
|
|
|
En línea
|
|
|
|
Caster
Desconectado
Mensajes: 405
Divide y vencerás
|
Pon el código que tienes ahora, es que sino no me arreglo ajja Saludos Edito: Lo mejor es que lo hagas así: printf("el area del trapecio es %f metros\n", (basemayor+basemenor)*altura/2);Te ahorras una variable, líneas de código y no da fallo. Saludos
|
|
|
|
« Última modificación: 29 Diciembre 2011, 13:42 por |Demon| »
|
En línea
|
"Saber que se sabe lo que se sabe y que no se sabe lo que no se sabe, he aquí el verdadero saber." (Confucio)
|
|
|
yescri
Desconectado
Mensajes: 13
|
Demon lo que yo me refiero es a esto. Si pongo el programa de esta manera me da un resultado erroneo. #include <stdio.h>
int main () { float basemayor,basemenor,altura,area; area=(basemayor+basemenor)*altura/2; 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);
printf("el area del trapecio es %f metros\n",area); return 0; } Si lo pongo asi si me sale bien #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); return 0; } Mi pregunta es: Que implica que lo declare en un lugar o en otro. Espero haberme explicado bien. Un saludo 
|
|
|
|
|
En línea
|
|
|
|
Caster
Desconectado
Mensajes: 405
Divide y vencerás
|
Ni idea ;$ Pero hazlo como te dije yo así no hay error  Saludos
|
|
|
|
|
En línea
|
"Saber que se sabe lo que se sabe y que no se sabe lo que no se sabe, he aquí el verdadero saber." (Confucio)
|
|
|
yescri
Desconectado
Mensajes: 13
|
 bueno no pasa nada pero ya es saberlo por intriga. Haber si algún otro compañero puede echarnos una mano!!  Gracias programadores por vuestro tiempo 
|
|
|
|
|
En línea
|
|
|
|
Caster
Desconectado
Mensajes: 405
Divide y vencerás
|
Creo que ya se cual es el error: #include <stdio.h> int main () { float basemayor,basemenor,altura,area; area=(basemayor+basemenor)*altura/2; 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); printf("el area del trapecio es %f metros\n",area); return 0; } 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í #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); return 0; } 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
|
|
|
|
|
En línea
|
"Saber que se sabe lo que se sabe y que no se sabe lo que no se sabe, he aquí el verdadero saber." (Confucio)
|
|
|
3mp3z@ndo
Desconectado
Mensajes: 22
|
Demon lo que yo me refiero es a esto. Si pongo el programa de esta manera me da un resultado erroneo. #include <stdio.h>
int main () { float basemayor,basemenor,altura,area; area=(basemayor+basemenor)*altura/2; 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);
printf("el area del trapecio es %f metros\n",area); return 0; } Si lo pongo asi si me sale bien #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); return 0; } 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 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: 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 
|
|
|
|
« Última modificación: 29 Diciembre 2011, 14:45 por 3mp3z@ndo »
|
En línea
|
|
|
|
|
|