• Viernes 8 de Noviembre de 2024, 23:13

Autor Tema:  Problema al ejecutar codigo  (Leído 1024 veces)

Blazin

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema al ejecutar codigo
« en: Miércoles 18 de Agosto de 2010, 02:07 »
0
Hola gente , soy nuevo en el foro.
Estoy programando en C o al menos intentando y tengo el siguiente codigo

#include<stdio.h>
#include<conio.h>
#include<string.h>


void main()
{
  int i,tel[6],num;
  char nomb[6],dir[6];

  for(i=1;i<=5;i++)
  {
    printf("nIngrese datos del individuo %d",i);
    printf("nNombre:");
    scanf("%s",nomb);
    gets(nomb);
    fflush(stdin);
    printf("Direccion:");
    scanf("%s",dir);
    fflush(stdin);
    printf("Telefono:");
    scanf("%d",&tel);
    }


    printf("ingrese numero de individuo:");
    scanf("%d",&num);
    i=num;

    while(num!=0)
    {
      printf("nombre %s",nomb);
      printf("direccion %s",dir);
      printf("telefono %d",tel);

      printf("pulse cero para terminar:");
      scanf("%d",&num);
      }


getch();
}

La consigna del problema es /*realizar un programa que solicite el nombre,direccion y telefono de 5 personas.Una vez metidos preguntara un numero entre 1 y 5 para sacar la informacion de esa persona. El cero termina*/

Lo que hice fue declarar 3 arrays de strings para guardar nombre,direccion y telefono de las personas para luego poder consultar la info a traves del subindice. Mi problema es que al ejecutar el codigo me aparece
el siguiente warning: Thread stopped , Fault access violation luego de ingresar el primer dato.  Seguramente me habre mandado algun moco con los arrays , ya que al parecer parece que esta tratando de escribir en una posicion de memoria indebida.
Si alguien me podria dar una mano lo agradeceria.

Saludos,

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema al ejecutar codigo
« Respuesta #1 en: Miércoles 18 de Agosto de 2010, 03:24 »
0
Bueno, para empezar, las cadenas en C se representan como vectores de char, entonces un arreglo de cadenas en realidad se representaria como una matriz de char, siendo la fila el numero de cadenas que quieres guardar, y la columna, la longitud de cada cadena o dicho de otra manera, si quieres guardar 6 nombres, y cada nombre contiene 30 caracteres entonces la definicion correcta seria nomb[6][30].

Numero 2: los numeros telefonicos es mas recomendable guardarlos como string y no como int, ya que no vamos a realizar ninguna operacion aritmetica (suma, resta, etc) con ellos, y ademas si el numero es muy largo, no cabria en una variable int. suponiendo que tu numero tiene diez digitos, incluyendo clave de larga distancia lo correcto seria definirlo tel[6][10]

Numero 3, los arreglos en C comienzan en cero, entonces tu ciclo for tambien debe comenzar en cero.

Numero 4, es mas recomendable usar fgets para leer en lugar de scanf o gets, ya que fgets permite especificar cuantos caracteres vamos a leer, y asi evitar un desbordamiento de buffer. la sintaxis de fgets es:

char * fgets ( char * str, int num, FILE * stream );

donde str es la cadena a leer, num es el numero de caracteres a leer, y stream es el archivo de donde vamos a leer, si queremos leer del teclado debemos usar como archivo stdin, que representa la entrada estandar por teclado.

Explicado esto, te pongo parte del codigo con las correcciones hechas, te queda de tarea terminarlo :)

Código: C++
  1.  
  2.     char tel[6][10], nomb[6][30],dir[6][30];
  3.  
  4.     for(i = 0;i <= 5; i++)
  5.     {
  6.         printf("nIngrese datos del individuo %d",i);
  7.         printf("nNombre:");
  8.         fgets (nomb[i], 30, stdin);
  9.         fflush(stdin);
  10.         printf("Direccion:");
  11.         fgets (dir[i], 30, stdin);
  12.         fflush(stdin);
  13.         printf("Telefono:");
  14.         fgets (tel[i], 10, stdin);
  15.     }
  16.  
  17.  

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Blazin

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema al ejecutar codigo
« Respuesta #2 en: Miércoles 18 de Agosto de 2010, 03:38 »
0
Muchisimas gracias ProfesorX por haberte tomado la molestia.

Ya corregi el codigo y anda a la perfeccion !!! :)

Tendre en cuenta tus explicaciones para no cometer errores nuevamente.

Un abrazo!

Gracias