[SOLUCIONADO]Fallo en C

Iniciado por D4RKS0N1K, Noviembre 15, 2015, 04:45:25 PM

Tema anterior - Siguiente tema

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

Noviembre 15, 2015, 04:45:25 PM Ultima modificación: Noviembre 22, 2015, 06:03:38 PM por blackdrake
Buenas!

Tengo este código ;

Código: c
#include <stdio.h>


char nombre;
char apellidos;
int edad;
int main (void)
{
printf ("Introduzca su nombre");
scanf ("%s", &nombre);
printf ("Introduzca sus apellidos");
scanf ("%s", &apellidos);
printf ("Por último introduzca su edad");
scanf ("%n", &edad);
if ((edad>=18) && (edad<=22))
printf ("%s", &nombre);
else
printf ("No cumple los requisitos");
}


El problema está en que, al compilarlo y ejecutarlo por consola, muestra bien el apartado de nombre y apellido pero, una vez introducido lo de apellido, se muestra inmediatamente lo de introduzca su edad, y pegado lo de no cumple los requisitos, sin siquiera dejarme introducir la edad.

¿Qué ocurre?

Pues yo veo dos cosas:
-1 Que es scanf("%n".....)? Por lo que tengo entendido es %d cuando quieres introducir un número decimal.
-2 Estás mezclando strings con char. has creado una variable char y después al introducir en el teclado dices que van a introducir un string.

Te dejo el código bien hecho, comprobado que funciona:

Código: c
#include <stdio.h>


char nombre[20];
char apellidos[20];
int edad;
int main (void)
{
printf ("Introduzca su nombre: ");
scanf ("%s", &nombre);
printf ("Introduzca sus apellidos: ");
scanf ("%s", &apellidos);
printf ("Por ultimo introduzca su edad: ");
scanf ("%d", &edad);
if ((edad>=18) && (edad<=22))
printf ("%s", &nombre);
else
printf ("No cumple los requisitos");
}
RollthBuen hacker mejor You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login/You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Pues yo veo dos cosas:
-1 Que es scanf("%n".....)? Por lo que tengo entendido es %d cuando quieres introducir un número decimal.
-2 Estás mezclando strings con char. has creado una variable char y después al introducir en el teclado dices que van a introducir un string.

Te dejo el código bien hecho, comprobado que funciona:

Código: c
#include <stdio.h>


char nombre[20];
char apellidos[20];
int edad;
int main (void)
{
printf ("Introduzca su nombre: ");
scanf ("%s", &nombre);
printf ("Introduzca sus apellidos: ");
scanf ("%s", &apellidos);
printf ("Por ultimo introduzca su edad: ");
scanf ("%d", &edad);
if ((edad>=18) && (edad<=22))
printf ("%s", &nombre);
else
printf ("No cumple los requisitos");
}


Gracias por contestar y tomarte la molestia!
El primero ha sido un fallo muy tonto, y respecto al char, lo que haces de char[20] imagino que sera para especificar cuantos caracteres contendrá, pero, si a su vez quiero hacer de este un vector sería char[20][5] suponiendo que quiera que mi vector tenga cinco posiciones?

Un saludo y gracias

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Pues yo veo dos cosas:
-1 Que es scanf("%n".....)? Por lo que tengo entendido es %d cuando quieres introducir un número decimal.
-2 Estás mezclando strings con char. has creado una variable char y después al introducir en el teclado dices que van a introducir un string.

Te dejo el código bien hecho, comprobado que funciona:

Código: c
#include <stdio.h>


char nombre[20];
char apellidos[20];
int edad;
int main (void)
{
printf ("Introduzca su nombre: ");
scanf ("%s", &nombre);
printf ("Introduzca sus apellidos: ");
scanf ("%s", &apellidos);
printf ("Por ultimo introduzca su edad: ");
scanf ("%d", &edad);
if ((edad>=18) && (edad<=22))
printf ("%s", &nombre);
else
printf ("No cumple los requisitos");
}


Gracias por contestar y tomarte la molestia!
El primero ha sido un fallo muy tonto, y respecto al char, lo que haces de char[20] imagino que sera para especificar cuantos caracteres contendrá, pero, si a su vez quiero hacer de este un vector sería char[20][5] suponiendo que quiera que mi vector tenga cinco posiciones?

Un saludo y gracias

Lo que he hecho con char nombre[20] es hacer un vector de caracteres, un vector de caracteres es un string. para hacer un array de strings primero crearía un tipo String y después haría el array, te dejo un ajemplo para que entiendas mejor:

Código: c
#include <stdio.h>

int main(){
int i;
typedef char tipoString[20];
tipoString nombres[5];
for (i = 0; i < 5; i++){
scanf("%s",&nombres[i]);
}
for (i = 0; i < 5; i++){
printf("%s\n,nombres[i]);
}
}
RollthBuen hacker mejor You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login/You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

No sé si deberíamos considerarlo importante, pero yo metería las órdenes de los condicionales entre llaves {}.
Por lo demás, a mí el siguiente código me funciona como pides, cambiando el tipo de valor del scanf a decimal "%d":
Código: c
    #include <stdio.h>
     
     
    char nombre;
    char apellidos;
    int edad;
    int main (void)
    {
    printf ("Introduzca su nombre");
    scanf ("%s", &nombre);
    printf ("Introduzca sus apellidos");
    scanf ("%s", &apellidos);
    printf ("Por último introduzca su edad");
    scanf ("%d", &edad);
    if ((edad>=18) && (edad<=22)) {
    printf ("%s", &nombre); }
    else {
    printf ("No cumple los requisitos"); }
    }
Podría vivir perfectamente con una mancha de pis en la alfombra, pero qué va, tío: Más complicaciones.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
No sé si deberíamos considerarlo importante, pero yo metería las órdenes de los condicionales entre llaves {}.
Por lo demás, a mí el siguiente código me funciona como pides, cambiando el tipo de valor del scanf a decimal "%d":
Código: c
    #include <stdio.h>
     
     
    char nombre;
    char apellidos;
    int edad;
    int main (void)
    {
    printf ("Introduzca su nombre");
    scanf ("%s", &nombre);
    printf ("Introduzca sus apellidos");
    scanf ("%s", &apellidos);
    printf ("Por último introduzca su edad");
    scanf ("%d", &edad);
    if ((edad>=18) && (edad<=22)) {
    printf ("%s", &nombre); }
    else {
    printf ("No cumple los requisitos"); }
    }


CIerto, no me había fijado en los condicionales :D
RollthBuen hacker mejor You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login/You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login