Home > Software engineering >  User input not being passed to function
User input not being passed to function

Time:04-11

I am working on a college project and we're supposed to write a basic CRUD program in C. In case 1 of my switch, "cpfinput" is passed fine to my function inserir_servidor, but "nominput" (name) is not. I tried debugging it and nominput does actually contain the user input, but when I print my "nomes" array after calling the function, it's empty.

Please forgive me if this is a poorly written post, I am new to SO.

How to reproduce:

1 - Type 1 and press enter.

2 - Enter anything.

3 - Enter anything.

4 - Type 5, it should display "0, a blank, and whatever your inserted in step 3.

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

#define TAM 100

char codigos[TAM][9];
char nomes[TAM][255];
char cpfs[TAM][11];
int ocupados[TAM];

int inserir_servidor(char[], char[]);
int alterar_servidor(char[], char[], char[]);
int excluir_servidor(char[]);
int mostrar_servidor(char[]);
int mostrar_servidores();

void inic_ocupados();

int main()
{
    char codinput[9], nominput[255], cpfinput[11];
    int input = -1;

    inic_ocupados();

    do
    {
        printf("1. Inserir um servidor.\n");
        printf("2. Alterar um servidor.\n");
        printf("3. Excluir um servidor.\n");
        printf("4. Mostrar um servidor.\n");
        printf("5. Mostrar todos os servidores.\n");
        printf("0. Sair do programa.\n");

        printf("Escolha: ");
        scanf("%d", &input);

        switch(input)
        {
            case 0:
                printf("Encerrando...");
                return 0;
            case 1: //inserir
                printf("Insira o nome do servidor: ");
                scanf(" %s", nominput);
                printf("Insira o cpf do servidor: ");
                scanf(" %s", cpfinput);
                inserir_servidor(nominput, cpfinput);
                break;
            case 2: //alterar
                printf("Insira o codigo do servidor: ");
                scanf(" %s", codinput);
                printf("Insira um novo nome: ");
                scanf(" %s", nominput);
                printf("Insira um novo cpf: ");
                scanf(" %s", cpfinput);
                alterar_servidor(codinput, nominput, cpfinput);
                break;
            case 3: //excluir
                printf("Digite o codigo do servidor a ser excluido: ");
                scanf(" %s", codinput);
                excluir_servidor(codinput);
                break;
            case 4: //listar um
                printf("Digite o codigo do servidor a ser mostrado: ");
                scanf(" %s", codinput);
                mostrar_servidor(codinput);
                break;
            case 5: //listar todos
                mostrar_servidores();
                break;
            default:
                printf("Escolha invalida.\n");
                break;
        }
    } while(input);
    return 0;
}

int inserir_servidor(char nominput[], char cpfinput[])
{
    for(int i = 0; i < TAM; i  )
    {
        if (!ocupados[i])
        {
            itoa(i, codigos[i], 10);
            strcpy(nomes[i], nominput);
            strcpy(cpfs[i], cpfinput);
            ocupados[i] = 1;
            return 1;
        }
    }
    return 0;
}

int alterar_servidor(char codinput[], char nominput[], char cpfinput[])
{
    for(int i = 0; i < TAM; i  )
    {
        if(!strcmp(codigos[i], codinput))
        {
            strcpy(nomes[i], nominput);
            strcpy(cpfs[i], cpfinput);
            return 1;
        }
    }
    return 0;
}

int excluir_servidor(char codinput[])
{
    for(int i = 0; i < TAM; i  )
    {
        if(!strcmp(codigos[i], codinput))
        {
            ocupados[i] = 0;
            return 1;
        }
    }
    return 0;
}

int mostrar_servidor(char codinput[])
{
    for(int i = 0; i < TAM; i  )
    {
        if(!ocupados[i])
        {
            if(!strcmp(codigos[i], codinput))
            {
                printf("Codigo \t Nome \t CPF\n");
                printf("%s \t %s \t %s\n", codigos[i], nomes[i], cpfs[i]);
                return 1;
            }
        }
    }
    return 0;
}

int mostrar_servidores()
{
    for(int i = 0; i < TAM; i  )
    {
        if(ocupados[i])
        {
            printf("Codigo \t Nome \t CPF\n");
            printf("%s \t %s \t %s\n", codigos[i], nomes[i], cpfs[i]);
        }
    }
    return 0;
}

void inic_ocupados()
{
    for(int i = 0; i < TAM; i  )
    {
        ocupados[i] = 0;
    }
}

CodePudding user response:

I cannot find the error you report.

1. Inserir um servidor.
2. Alterar um servidor.
3. Excluir um servidor.
4. Mostrar um servidor.
5. Mostrar todos os servidores.
0. Sair do programa.
Escolha: 1
Insira o nome do servidor: aaaaa
Insira o cpf do servidor: bbbbb
1. Inserir um servidor.
2. Alterar um servidor.
3. Excluir um servidor.
4. Mostrar um servidor.
5. Mostrar todos os servidores.
0. Sair do programa.
Escolha: 5
Codigo   Nome    CPF
0        aaaaa   bbbbb
1. Inserir um servidor.
2. Alterar um servidor.
3. Excluir um servidor.
4. Mostrar um servidor.
5. Mostrar todos os servidores.
0. Sair do programa.
Escolha:

There are multiple errors in the code.

First scanf(" %s",... looks for space delimted input so if I enter this

Escolha: 1
Insira o nome do servidor: mr smith <<<<<=========
Insira o cpf do servidor: 1. Inserir um servidor.
2. Alterar um servidor.
3. Excluir um servidor.
4. Mostrar um servidor.
5. Mostrar todos os servidores.
0. Sair do programa.
Escolha:

The 'mr' is taken as 'nom' and 'smith' is taken as 'cpf'

Also this function

int mostrar_servidor(char codinput[])
{
    for (int i = 0; i < TAM; i  )
    {
        if (!ocupados[i])
        {
            if (!strcmp(codigos[i], codinput))
            {
                printf("Codigo \t Nome \t CPF\n");
                printf("%s \t %s \t %s\n", codigos[i], nomes[i], cpfs[i]);
                return 1;
            }
        }
    }
    return 0;
}

Is broken.

It only looks at unoccupied cells

 if (!ocupados[i]) 

should be

 if (ocupados[i])
  • Related