Ayuda con programa en c

Iniciado por yescri, 28 Diciembre 2011, 10:21 AM

0 Miembros y 1 Visitante están viendo este tema.

yescri

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



satu

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 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!!
Breakbeat como forma de vida

yescri

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


Caster

#3
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

Citar2. "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:
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

yescri

Muchas gracias demon  :) así lo hare.

yescri

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

Sagrini

#6

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

satu

Cita de: Sagrini en 28 Diciembre 2011, 13:17 PM

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



Te sobra el ) del final  :P

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

Saludos
Breakbeat como forma de vida

yescri

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

Caster

#9
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