Struct Vector: Pass by reference in C

1

This code is a simple register of people, containing code and the person's name. I am confused as to passing the struct vector to the "insert" procedure.

When compiling, the program stops working. In the compiler I get the following error: "Program received signal sigsegv segmentation fault". I saw that this error has something to do with incorrect reference to a pointer, but I do not know how to solve it.

Follow the code:

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
struct pessoas
{
	int codigo;
	char nome [50];
};

	struct pessoas vetpessoas[5];
	int k = 0;


void inserir (struct pessoas *vetpessoas, int *k)
{
	char nomeaux [50];
	int codaux, i, j;
	char resp, resp1;
	
	resp = 's';
	
	if (*k > 0)
	{
		i = *k;
	}
	else 
	{
		i = 0;
	}
	
	do
	{
		do
		{
			printf ("Entre com o codigo:");
			scanf("%i",codaux);
		}
		while (codaux < 0);
		
		do
		{
			printf ("Entre com o nome:");
			scanf ("%s",nomeaux);
		}
		while (nomeaux == "");
		
		do
		{
			j = j+1;
		}
		while (codaux != vetpessoas[j].codigo && j<i);
		
		if (j==i)
		{
			do
			{
				printf("Confirma a inclusao (S/N) ?");
				scanf ("%s",resp1);
			}
			while (resp1!='s' || resp1!='n');
			
			if (resp1 =='s')
			{
				vetpessoas[i].codigo = codaux;
				strcpy(vetpessoas[i].nome, nomeaux);
				printf ("Inclusao efetuada com sucesso!");
			}
			else 
			{
				printf ("Codigo ja cadastrado!");
				i = i-1;
			}
		}
		
		if (i < 4)
		{
			do
			{
				printf("Deseja continuar incluindo (S/N) ?");
				scanf("%c",resp);
			}
			while (resp1!='s' || resp1!='n');
		}
		i = i+1;
	}
	while (resp=='s' && i<=4);
	
	*k = i;
	
	if (i > 4)
	{
		printf ("Vetor já está Cheio! Não é permitido mais armazenar valores!!!");
	}

}

main ()
{	

    inserir (vetpessoas, &k);
	return 0;

}
    
asked by anonymous 30.10.2018 / 19:38

1 answer

1

The problem of your code is in the readings: in scanf you must pass the memory address of the variable that will receive the reading, not the variable itself. Below is your code with the fix.

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
struct pessoas
{
    int codigo;
    char nome [50];
};

struct pessoas vetpessoas[5];
int k = 0;


void inserir (struct pessoas *vetpessoas, int *k)
{
    char nomeaux [50];
    int codaux, i, j;
    char resp, resp1;

    resp = 's';

    if (*k > 0)
    {
        i = *k;
    }
    else 
    {
        i = 0;
    }

    do
    {
        do
        {
            printf ("Entre com o codigo:");
            scanf("%i", &codaux);
        }
        while (codaux < 0);

        do
        {
            printf ("Entre com o nome:");
            scanf ("%s", &nomeaux);
        }
        while (nomeaux == "");

        do
        {
            j = j+1;
        }
        while (codaux != vetpessoas[j].codigo && j<i);

        if (j==i)
        {
            do
            {
                printf("Confirma a inclusao (S/N) ?");
                fflush(stdin);
                scanf ("%c", &resp1);

                if (resp1 == 's' || resp1 == 'n')
                    break;
            }
            while (1);

            if (resp1 =='s')
            {
                vetpessoas[i].codigo = codaux;
                strcpy(vetpessoas[i].nome, nomeaux);
                printf ("Inclusao efetuada com sucesso!");
            }
            else 
            {
                printf ("Codigo ja cadastrado!");
                i = i-1;
            }
        }

        if (i < 4)
        {
            do
            {
                fflush(stdin);
                printf("Deseja continuar incluindo (S/N) ?");
                scanf("%c", &resp);

                if (resp == 's' || resp == 'n')
                    break;
            }
            while (1);
        }
        i = i+1;
    }
    while (resp=='s' && i<=4);

    *k = i;

    if (i > 4)
    {
        printf ("Vetor já está Cheio! Não é permitido mais armazenar valores!!!");
    }

}

main ()
{   

    inserir (vetpessoas, &k);
    return 0;

}
    
01.11.2018 / 02:15