int no guarda valor y gcc no me compila SOLUCIONADO

Imagen de chalimbu
0 puntos

hola a todos vengo a pediros el favor de que me ayudeis con este codigo que estaba haciendo viendo un tutorial pero sin hacerlo al pie de la letra utilize el ide geany y me dice que compilacion terminada con exito.es un programa sencillo que hace unas preguntas y luego dice una respuesta a las preguntas el problema esta en que en geany al compilar luego me muestra el valor que introduzco mal por ejemplo si coloco 20 de eda luego me sale con este numero -1075937496
ahora si lo compilo desde terminal con el gcc me muestra el siguiente error
tutobasica.c: In function ‘main’:
tutobasica.c:26:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("\n Tienes una edad de %d",Edad);
y ya sin mas pongo el codigo para ver si alguien me puede ayudar y muchas gracias por adelantado
#include <stdio.h>
main(){
char Nombre[15], Apellidop[15], Apellidom[15], Carrera[20], Deporte[20],
Comidad[20];
int Edad[50];

printf ("¿cual es tu nombre?");
scanf("%s", Nombre);
printf ("¿cual es tu apellido paterno?");
scanf("%s", Apellidop);
printf ("¿cual es tu apellido materno?");
scanf("%s", Apellidom);
printf ("¿cual es tu edad?");
scanf("%d",Edad);
printf ("¿que carrera estudiaste?");
scanf("%s", Carrera);
printf ("¿cual es tu deporte preferido?");
scanf("%s", Deporte);
printf ("¿cual es tu comidad favorita?");
scanf("%s", Comidad);//hasta aqui la recoleccion de variables

printf("hola %s ",Nombre);
printf("%s",Apellidop);
printf("%s",Apellidom);
printf("\n Tienes una edad de %d",Edad);
printf("\n asi que te gusta el %s ", Deporte);
printf("\n y tu comida favorita es %s ", Comidad);
printf("\n estudiaste %s ", Carrera);

getchar();
getchar();
return 0;
}

Imagen de gato2707
+1
0
-1

int Edad[50]

solamente debe declararse

int Edad

Explicación: int Edad[50] es una declaración de un arreglo de enteros, o si lo prefieres un apuntador (pointer) a int. Tú solamente quieres un valor entero que se guarde en una variable de tipo entero (int).

+1
0
-1

Saludos desde México
Mi Web: El Gato con Linux

Imagen de chalimbu
+1
-1
-1

muchas gracias por la pronta respuesta perosegun entiendo el arrego seria quitarle el [50] a la variable Edad y me sigue produciendo el mismo error ,tambien intente quitarle el [] a todo y me produce muchisimos mas errores para ver si era de mi ubuntu instalado compile en otro equipo pegando el codigo en un archivo de texto y compilando con gcc y no me funciono si nescesitas alguna otra informacion o se te ocurre que puede ser te lo agradeceria aun mas

+1
-1
-1

sistema hermoso

Imagen de chalimbu
+1
-1
-1

ahora desde el geany me dice se compilo con exito pero me manda el siguiente tutobasica.c:14:8: warning: ‘Edad’ is used uninitialized in this function [-Wuninitialized] y en realidad si estoy usando la variable edad y ya el compilador gcc me sigue mandando lo mismo tutobasica.c: In function ‘main’:
tutobasica.c:14:3: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
scanf("%d",Edad);
^
en realidad no importa con cual me compile el problema es que el que me complia y habre en geany el ejecutable luego no me lo habre
y ahora cuando llega a la pregunta de la edad aparece esto Segmentation fault (core dumped) (program exited with code: 139) y no continua la aplicacion vuelvo a colocar el codigo por si algo
#include
main(){
char Nombre[15], Apellidop[15], Apellidom[15], Carrera[20], Deporte[20],
Comidad[20];
int Edad;

printf ("¿cual es tu nombre?");
scanf("%s", Nombre);
printf ("¿cual es tu apellido paterno?");
scanf("%s", Apellidop);
printf ("¿cual es tu apellido materno?");
scanf("%s", Apellidom);
printf ("¿cual es tu edad?");
scanf("%d",Edad);
printf ("¿que carrera estudiaste?");
scanf("%s", Carrera);
printf ("¿cual es tu deporte preferido?");
scanf("%s", Deporte);
printf ("¿cual es tu comidad favorita?");
scanf("%s", Comidad);//hasta aqui la recoleccion de variables

printf("hola %s ",Nombre);
printf("%s",Apellidop);
printf("%s",Apellidom);
printf("\n Tienes una edad de %d",Edad);
printf("\n asi que te gusta el %s ", Deporte);
printf("\n y tu comida favorita es %s ", Comidad);
printf("\n estudiaste %s ", Carrera);

getchar();
getchar();
return 0;
}

+1
-1
-1

sistema hermoso

Imagen de gato2707
+1
0
-1

En que éstas programando: en C o en C++ pero suponiendo que se trate de C la sintaxis del scanf debe de ser

scanf("%d", &Edad);

Ahora que si se trata de C++, la totalidad de tu código debe de ser cambiada, existen métodos mas adecuados para hacerlo en C++.

Por otra parte, y en realidad no me acuerdo, puedes tener un error en los scanf de los arreglos de char. ¿Ya probaste que pasa si escribes mas caracteres de lo que el arreglo admite?

Si te da error de ejecución (como el que reportas) debes cambiar las cadenas de formato de los scanf a algo como "n%s" donde n representa el número máximo de caracteres que se deben leer.

Por último los Warnings (advertencias) dependiendo de lo que estés haciendo pueden ser ignorados, es algo bastante común, y dependiendo del compilador, pueden incluso ser "apagados" eso ya depende de ti y de lo que estés haciendo.

Date una vuelta por las referencias de scanf, incluso la Wikipedia tiene algunos ejemplos interesantes.

+1
0
-1

Saludos desde México
Mi Web: El Gato con Linux

Imagen de nolin
+1
0
-1

Necesitas entender las diferencias entre:
Una variable: 'Edad'
La dirección de esa variable: '&Edad'
Un puntero a la variable: 'pEdad' = &Edad
Un arreglo (o vector o matriz) es un puntero a una secuencia de variables: 'Edad[50]'.
Cómo pasar una variable (o un puntero, que no es más que otra variable) a una función de modo que la función pueda cambiar o no el valor de esa variable.
Si la funcion que quieras usar está definida para aceptar un puntero o no.

Te recomiendo un tutorial largo pero muy bueno http://zator.com/Cpp/index.htm sobre C++, donde mucho se puede aplicar a C.

+1
0
-1
Imagen de chalimbu
+1
0
-1

hola de nuevo
estoy intentando hacer esto en C(quiero aprender este me gusta mas(linux) )
lo del limite realmente no lo encontre en lugar de edad siempre me imprimia -1076775316 la solucion estuvo en colocarle el &en scanf y quitarselo al print
ahora la pequeña aplicacion corre justo como quiero gracias gato negro se ve que eres un exelente profesor
nolin disculpa las molestias y gracias por la pagina pero como en realidad se tan poco no me quiero poner a aprender c++ para luego buscar como se hace en c si realmente quiero aprender c (no se si me explico bien) igual gracias y hasta luego

+1
0
-1

sistema hermoso