elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 23:26  


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Ayuda con programa en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con programa en c  (Leído 1,183 veces)
yescri

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Ayuda con programa en c
« en: 28 Diciembre 2011, 10:21 »

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




En línea
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Ayuda con programa en c
« Respuesta #1 en: 28 Diciembre 2011, 11:00 »

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
scanf("%s", nombre);
scanf("%s", apellido1);
scanf("%s", apellido2);
 

Por cierto main debe devolver un int
Código
int main(void)
{
...
return 0;
}
 

Léete esto

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!!


En línea

Breakbeat como forma de vida
yescri

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con programa en c
« Respuesta #2 en: 28 Diciembre 2011, 11:56 »

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  ;)

En línea
Caster


Desconectado Desconectado

Mensajes: 405


Divide y vencerás


Ver Perfil WWW
Re: Ayuda con programa en c
« Respuesta #3 en: 28 Diciembre 2011, 12:04 »

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).
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.html

La mejor forma de usar main es:
Código
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:

Código
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 Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con programa en c
« Respuesta #4 en: 28 Diciembre 2011, 12:16 »

Muchas gracias demon  :) así lo hare.
En línea
yescri

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con programa en c
« Respuesta #5 en: 28 Diciembre 2011, 13:12 »

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...
En línea
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Ayuda con programa en c
« Respuesta #6 en: 28 Diciembre 2011, 13:17 »

Código
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 Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Ayuda con programa en c
« Respuesta #7 en: 28 Diciembre 2011, 13:24 »

Código
area=(basemayor+basemenor)*altura/2);
 


Te sobra el ) del final  :P

y a yescri le sigue faltando el return del final  :silbar:

Saludos
En línea

Breakbeat como forma de vida
yescri

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con programa en c
« Respuesta #8 en: 29 Diciembre 2011, 13:32 »

 ;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  :)
En línea
Caster


Desconectado Desconectado

Mensajes: 405


Divide y vencerás


Ver Perfil WWW
Re: Ayuda con programa en c
« Respuesta #9 en: 29 Diciembre 2011, 13:34 »

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
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 Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con programa en c
« Respuesta #10 en: 29 Diciembre 2011, 14:16 »

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>

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

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);
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 Desconectado

Mensajes: 405


Divide y vencerás


Ver Perfil WWW
Re: Ayuda con programa en c
« Respuesta #11 en: 29 Diciembre 2011, 14:20 »

Ni idea ;$

Pero hazlo como te dije yo así no hay error ;D

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 Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con programa en c
« Respuesta #12 en: 29 Diciembre 2011, 14:25 »

 ;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  ;-)
En línea
Caster


Desconectado Desconectado

Mensajes: 405


Divide y vencerás


Ver Perfil WWW
Re: Ayuda con programa en c
« Respuesta #13 en: 29 Diciembre 2011, 14:37 »

Creo que ya se cual es el error:


Código
#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í

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);
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 Desconectado

Mensajes: 22


Ver Perfil
Re: Ayuda con programa en c
« Respuesta #14 en: 29 Diciembre 2011, 14:43 »

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>

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

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);
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
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
« Última modificación: 29 Diciembre 2011, 14:45 por 3mp3z@ndo » En línea
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda en Programa
Programación General
redHat 11 768 Último mensaje 11 Febrero 2005, 02:49
por redHat
ayuda con mi programa
Programación Visual Basic
nitrox 2 656 Último mensaje 31 Julio 2005, 00:48
por Slasher-K
Ayuda con programa
Software
elohim 1 337 Último mensaje 9 Septiembre 2005, 14:17
por Thunder2k
Ayuda que Programa
Programación C/C++
kichan 1 607 Último mensaje 9 Septiembre 2005, 18:13
por Pseudoroot
ayuda con programa en c++
Programación C/C++
maryrisas 12 1,085 Último mensaje 18 Enero 2006, 21:57
por Manibal_man
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines