用户输入未传递给函数

User input not being passed to function

我正在做一个大学项目,我们应该用 C 编写一个基本的 CRUD 程序。在我的开关的情况 1 中,“cpfinput”被很好地传递给了我的函数 inserir_servidor,但是“ nominput"(名称)不是。我尝试调试它,nominput 实际上包含用户输入,但是当我在调用该函数后打印我的“nomes”数组时,它是空的。

写得不好请见谅post,我是SO新手

如何重现:

1 - 输入 1 并按回车键。

2 - 输入任何内容。

3 - 输入任何内容。

4 - 输入 5,它应该显示“0,一个空白,以及您在第 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;
    }
}

我找不到您报告的错误。

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:

代码中有多个错误。

首先 scanf(" %s",... 寻找 space 分隔输入所以如果我输入这个

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:

'mr'取为'nom','smith'取为'cpf'

还有这个功能

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;
}

坏了。

它只查看未占用的单元格

 if (!ocupados[i]) 

应该是

 if (ocupados[i])