• Miércoles 20 de Noviembre de 2024, 16:38

Autor Tema:  Cargar un arreglo de nombres  (Leído 4263 veces)

Leo1107

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Cargar un arreglo de nombres
« en: Domingo 3 de Agosto de 2008, 22:43 »
0
Buenas estoy haciendo un programita que me mandaron en clase que debo leer los nombres meter las notas y luego mostrarlo pero no se como meter la palabras dentro de un arreglo vean lo que llevo..

Código: Text
  1. #include <stdio.h>
  2.  
  3. #define TALLA 200
  4. #define NRO_ALUMNOS 5
  5.  
  6. int main()
  7. {
  8.    
  9.     int i, j;
  10.    
  11.     int notas[NRO_ALUMNOS];
  12.     char nom[TALLA];
  13.    
  14.    
  15.     for(i = 0; i < NRO_ALUMNOS; i++)
  16.     {
  17.         printf("Ingresa un nombre: ");
  18.         scanf("%s", &nom[i]);
  19.         printf("Ingrese la nota: ");
  20.         scanf("%d", &notas[i]);
  21.     }
  22.    
  23.     for(j = 0; j < NRO_ALUMNOS; j++)
  24.     {
  25.         printf("El nombre es: %sty su nota es: %d", nom[j], notas[j]);
  26.     }
  27.    
  28.     getchar();
  29.     getchar();
  30.    
  31. }
  32.  

la idea es que yo llenara ejemplo ingreso los 5 nombres y las 5 notas y me muestre los 5 nombres y las notas... pero me dice violacion de segmento.. alguien puede ayudarme?

gracias

Iganguli

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: mx
    • Ver Perfil
Re: Cargar un arreglo de nombres
« Respuesta #1 en: Lunes 4 de Agosto de 2008, 06:39 »
0
primero deberas declarar un vector para que tenga los 5 alumnos que quieres

Citar
printf("Ingresa un nombre: ");
scanf("%s", &nom);

estas escribiendo siempre en la misma posicion del arreglo po eso te manda error, con las notas tambien es lo mismo utilza una variable que recorra las notas con otro ciclo for
   
   
Código: Text
  1.  
  2.      for(i = 0; i < NRO_ALUMNOS; i++)
  3.      {
  4.          printf("Ingresa un nombre: ");
  5.          scanf("%s", &nom);
  6.          for(j = 0; j < NRO_ALUMNOS; j++)
  7.          printf("Ingrese la nota: ");
  8.          scanf("%d", &notas[j]);
  9.      }
  10.  
para imprimir usa en escencia el mismo ciclo por que sino solo te imprimira la primera nota, auqne si usas el vector que te digo cambiaria un poco el ciclo

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cargar un arreglo de nombres
« Respuesta #2 en: Lunes 4 de Agosto de 2008, 14:47 »
0
Cita de: "Iganguli"
estas escribiendo siempre en la misma posicion del arreglo

No escribe siempre en la misma posición si utiliza un for. Utiliza el mismo índice (i) para ambos arreglos, lo cual está perfecto. Tu código es erróneo puesto que escribes j notas por cada alumno (i), lo cual no es lo que Leo1107 quiere (no ha dicho nada de eso, vamos). Además te faltan los corchetes:

Código: Text
  1.  
  2. for(i = 0; i < NRO_ALUMNOS; i++)
  3.       {
  4.           printf("Ingresa un nombre: ");
  5.           scanf("%s", &nom);
  6.           for(j = 0; j < NRO_ALUMNOS; j++)
  7.           {
  8.               printf("Ingrese la nota: ");
  9.               scanf("%d", &notas[j]);
  10.           }
  11.       }
  12.  
  13.  

El problema que tiene es éste:

Código: Text
  1.  
  2. char nom[TALLA];
  3.  
  4.  

Aquí estas declarando una sola cadena de caracteres de tamaño TALLA. Ten en cuenta que es un vector de caracteres, no de cadenas de caracteres. Para esto último tendrías que declarar un vector de punteros a cadenas de caracteres, es decir:

Código: Text
  1.  
  2. char *nom[TALLA];
  3.  
  4.  

y tendrías que modificar esta línea:

Código: Text
  1.  
  2. scanf("%s", &nom[i]);
  3.  
  4.  

tal que

Código: Text
  1.  
  2. scanf("%s", nom[i]);
  3.  
  4.  

Esto es debido a que nom ya es un puntero, no necesitamos un puntero a puntero  :D .

Espero que esto te resuelva tu problema, ya que no lo he probado. Ya me cuentas. Un saludo.

Iganguli

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: mx
    • Ver Perfil
Re: Cargar un arreglo de nombres
« Respuesta #3 en: Lunes 4 de Agosto de 2008, 16:40 »
0
bueno a  lo que yo me referia al escribir en la misma posicion es que si por ejemple tecleaba pepe como nombre siempre iba a guardar e, si quiere guardar X numero de alumnos, con Y numero de notas es mejor crear un vector que contenga estos campos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cargar un arreglo de nombres
« Respuesta #4 en: Martes 5 de Agosto de 2008, 09:47 »
0
Cita de: "Iganguli"
si quiere guardar X numero de alumnos, con Y numero de notas

Si es así, bien, pero él no ha comentado eso en ningún momento. Navaja de Occam.

Iganguli

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: mx
    • Ver Perfil
Re: Cargar un arreglo de nombres
« Respuesta #5 en: Martes 5 de Agosto de 2008, 18:28 »
0
Citar
Si es así, bien, pero él no ha comentado eso en ningún momento. Navaja de Occam
tal vez en eso me adelante pero tampoco tu codigo es del todo correcto por que tan to tu como yo no vimos el error en primer instancio el error es este
Código: Text
  1. printf("Ingrese la nota: ");
  2.         scanf("%d", ¬as[i]);
  3.  

por lo tanto nunca guarda en direccion efectiav la nota tendria que modifcarlo
Código: Text
  1. printf("Ingrese la nota: ");
  2.         scanf("%d",& notas[i]);
  3.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cargar un arreglo de nombres
« Respuesta #6 en: Miércoles 6 de Agosto de 2008, 10:29 »
0
:wacko: Esto es absurdo. Has puesto el mismo código que él tenía puesto en el primer post.   :ph34r:

(Copiar-pegar del primer post)
Código: Text
  1.  
  2. printf("Ingrese la nota: ");
  3. scanf("%d", &notas[i]);
  4.  
  5.  

En fin, si el pibe no responde, paso de seguir discutiendo tonterías. Que diga cuáles fueron sus resultados o yo paso.  

-_-  -_-  -_-