Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Pentesting! en 20 Julio 2020, 09:05 am



Título: Buenas noches soy nuevo en lenguaje c, quisiera de su colaboración para resolver
Publicado por: Pentesting! en 20 Julio 2020, 09:05 am
Código
  1. */Elabore un programa en lenguaje C que pida el nombre y la edad de dos hermanos, el programa
  2. debe mostrar un mensaje indicando el nombre y la edad del hermano mayor y, cuantos anos de
  3. diferencia lo distancia con el hermano menor.
  4. NOTA: Debe definir las variables tipo arreglo y, hacer uso de funciones para resolver el enunciado.*/
  5.  
  6. //En si lo que estoy tratando es de pasar el array tipo char como parametro a la funcion validator
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. void validator(int [], char []);
  12.  
  13. int main() {
  14. char arrayCadenas[20];
  15. int edad[2],i;
  16.  
  17. for(i=0; i<2; i++){
  18. printf("Nombre:");
  19. scanf("%s",&arrayCadenas[i]);
  20. printf("edad:");
  21. scanf("%d",&edad[i]);
  22. }
  23. validator(edad,arrayCadenas);
  24. return 0;
  25. }
  26.  
  27. void validator(int edad[], char arrayCadenas[]){
  28. if(edad[0] > edad[1]){
  29.  
  30. printf("Nombre:%s",arrayCadenas[0]);
  31. printf("Edad:%d",edad[0]);
  32. }
  33. else{
  34.  
  35. printf("Nombre:%s",arrayCadenas[1]);
  36. printf("Edad:%d",edad[1]);
  37. }
  38. }
  39.  
  40.  


Título: Re: Buenas noches soy nuevo en lenguaje c, quisiera de su colaboración para resolver
Publicado por: K-YreX en 21 Julio 2020, 01:26 am
El problema que tienes es que estás utilizando un array unidimensional para el nombre y debería ser bidimensional.
Cuando se trabaja con cadenas de caracteres, cada caracter es una posición del array por lo que la primera fila debería tener el primer nombre y la segunda fila, el segundo nombre.

Además para guardar cadenas es mejor utilizar fgets() que scanf().

Código
  1. #define MAX_HERMANOS 2
  2. #define MAX_SIZE 20
  3.  
  4. int main(){
  5.  char nombres[MAX_HERMANOS][MAX_SIZE];
  6.  for(int i = 0; i < MAX_HERMANOS; ++i){
  7.    printf("Introduce el nombre del hermano %d: ", i+1);
  8.    fgets(nombres[i], MAX_SIZE, stdin);
  9.    // Eliminar el salto de linea que se genera al pulsar ENTER y limpiar el buffer:
  10.    if(nombres[i][strlen(nombres[i])-1] == '\n') nombres[i][strlen(nombres[i])-1] = '\0';
  11.    else while(getchar() != '\n');
  12.  }
  13. }