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])