Problem with scanf

Asked

Viewed 164 times

0

Hello, I trying to make a customer registration in C using struct and I came across the following problem:

When was going to read the user’s DDD with scanf it did not save, nor even print the value, only the location of the variable

I managed to solve saving that amount with:

scanf("%s",&funcionario[cont].ddd);

"All right my problem solved", but my variable is an integer type and not a string. Why not save the value with %d?

Current code below:

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

struct cadastro{  
    char nome[50],
         email[50];  

    int ddd[10],
        numero_tel[20];
};

struct aniversario_e_numero
{
    int dia[3],
        mes[3],
        ano[9];
};

struct endereco
{
    char rua[30],
         bairro[20],
         cidade[20],
         pais[20],
         estado[20],
         complemento[20];

    int  cep[20],
         numero[20];

};
int main()
{  
    setlocale(LC_ALL, "");

    ///Variáveis:
    struct cadastro funcionario[100];
    int cont = 0,
        escolha = 1;

    do{

    printf("-------------------------\n"
           "CADASTRO DE FUNCIONÁRIO:\n"
           "-------------------------\n"
           "(1) FAZER UM NOVO CADASTRO\n"
           "(2) BUSCA POR NOME\n"
           "(3) BUSCAR POR MÊS\n"
           "(4) BUSCAR POR DIA\n"
           "(5) MOSTRAR CADASTRO GERAL\n"
           "(6) SAIR DO PROGRAMA\n"
           "ESCOLHA UMA OPÇÃO: ");
           scanf("%d", &escolha);
           fflush(stdin);
           system("cls");

    switch(escolha)
    {
    case 1:

        for(cont; cont<=100; cont++){

        printf("INFORME NOME DO FUNCIONÁRIO: ");
        fgets(funcionario[cont].nome, 50, stdin);
        funcionario[cont].nome[strlen(funcionario[cont].nome)-1] = '\0';
        fflush(stdin);
        printf("INFORME E-MAIL DE FUNCIONÁRIO: ");
        fgets(funcionario[cont].email, 50, stdin);
        funcionario[cont].email[strlen(funcionario[cont].email)] = '\0';
        fflush(stdin);
        printf("INFORME SEU DDD: ");
        scanf("%s", &funcionario[cont].ddd);
        fflush(stdin);
        break;
        }
        system("cls");
        printf("\tUSUÁRIO: %s\n"
               "\tCADASTRADO COM SUCESSO\n"
               "\tPRESSIONE ENTER PARA VOLTAR AO MENU", funcionario[cont].nome);
        getchar();
        system("cls");
        break;


    }
    }while(escolha);

return 0;
}
  • I do not know if it is enough to be duplicate, but the solution is here: https://answall.com/q/45213/101

  • I don’t quite understand, I’m a beginner and it’s still confusing for me... because my variable ddd is an entire type there in the struct and I could only record a value using %s... it doesn’t make sense.

  • Exactly, your code does not make sense. Treat descriptive information as text and your problem will be solved (there are others besides this).

  • When you create a vector of int, not that each position will contain a number from 1 to 9, it will contain the whole number. Works with string, because the string, specifically, is already a char vector, so it works the way you expect it to when it’s %s, but it doesn’t work when it’s %d

  • For you who said that my code does not make sense I already finished it and yes it works perfectly, if you do not understand I will put the code below for you to test and remove your words... I am beginner but proud!!! kkkk

  • please don’t be angry - this is how the site works; if you like, from a past in chat, there you can ask questions of all kinds without this negative feedback... until more!

Show 1 more comment

1 answer

1

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

struct nascimento
{
char dia[5],
     mes[5],
     ano[10];
};
struct endereco
{
char pais[20],
     estado[25],
     cidade[25],
     bairro[25],
     rua[25],
     numero[10],
     cep[20],
     complemento[25];
};
struct cadastro
{
 ///DADOS PESSOAIS:
char nome[50],
     email[50],
     ddd[5],
     numero_tel[20];

struct endereco local;
struct nascimento aniversario;
};




int main()
{
setlocale(LC_ALL, "");

///Variáveis:
struct cadastro funcionario[100];
char comparar1[50],
     comparar2[50];
int confirmacao = 0;
int cont = 0,
    cont2 = 0,
    escolha = 1;

do{


printf("-------------------------\n"
       "CADASTRO DE FUNCIONÁRIO:\n"
       "-------------------------\n"
       "(1) FAZER UM NOVO CADASTRO\n"
       "(2) BUSCA POR NOME\n"
       "(3) BUSCAR POR MÊS\n"
       "(4) BUSCAR POR DIA E MÊS\n"
       "(6) SAIR DO PROGRAMA\n"
       "ESCOLHA UMA OPÇÃO: ");
       scanf("%d", &escolha);
       fflush(stdin);
       system("cls");

switch(escolha)
{
case 1: ///CASO 1: CADASTRO DE FUNCIONÁRIOS;
    {

    for(cont; cont<=100;){


    printf("INFORME NOME DO FUNCIONÁRIO: ");
    gets(funcionario[cont].nome);
    fflush(stdin);

    printf("INFORME E-MAIL DE FUNCIONÁRIO: ");
    gets(funcionario[cont].email);

    printf("INFORME SEU DDD: ");
    gets(funcionario[cont].ddd);

    printf("INFORME SEU NUMERO DE TELEFONE: ");
    gets(funcionario[cont].numero_tel);

    printf("INFORME PAIS: ");
    gets(funcionario[cont].local.pais);

    printf("INFORME ESTADO: ");
    gets(funcionario[cont].local.estado);

    printf("INFORME CIDADE: ");
    gets(funcionario[cont].local.cidade);

    printf("INFORME BAIRRO: ");
    gets(funcionario[cont].local.bairro);

    printf("INFORME RUA: ");
    gets(funcionario[cont].local.rua);

    printf("INFORME N°: ");
    gets(funcionario[cont].local.numero);

    printf("INFORME CEP: ");
    gets(funcionario[cont].local.cep);

    printf("INFORME DATA DE NASCIMENTO\n");
    printf("DIA: ");
    gets(funcionario[cont].aniversario.dia);

    printf("MES: ");
    gets(funcionario[cont].aniversario.mes);

    printf("ANO: ");
    gets(funcionario[cont].aniversario.ano);

    cont++;
    break;
    }
    system("cls");
    printf("\tFUNCIONÁRIO: %s\n"
           "\tCADASTRADO COM SUCESSO\n"
           "\tTECLE ENTER PARA VOLTAR AO MENU", funcionario[cont-1].nome);
    getchar();
    system("cls");
    break; ///TÉRMINO DO CASO 1(CADASTRO DE FUNCIONÁRIO);
}

case 2: ///CASO 2: BUSCAR CADASTRO POR NOME;
    {

   fflush(stdin);
    printf("INFORME UM NOME PARA FAZER BUSCA: ");
    gets(comparar1);


    for(cont2=0; cont2<=cont; cont2 ++)
    {
        if(strcmp(funcionario[cont2].nome, comparar1)==0)
        {

            printf("O FUNCIONARIO ESTÁ CADASTRADO: \n\n"
                   "DADOS PESSOAIS:\n"
                   "NOME: %s\n"
                   "E-MAIL: %s\n"
                   "NUMERO DE TELEFONE: (%s) %s\n"
                   "\nENDERECO: \n"
                   "PAIS: %s\n"
                   "ESTADO: %s\n"
                   "CIDADE: %s\n"
                   "BAIRRO: %s\n"
                   "RUA: %s\n", funcionario[cont2].nome, funcionario[cont2].email,
                   funcionario[cont2].ddd, funcionario[cont2].numero_tel,
                   funcionario[cont2].local.pais, funcionario[cont2].local.estado,
                   funcionario[cont2].local.cidade, funcionario[cont2].local.bairro,
                   funcionario[cont2].local.rua);
            confirmacao ++;

        }
    }
    getchar();
    if(confirmacao == 0){
        printf("FUNCIONÁRIO NÃO CADASTRADO.\n"); }
    confirmacao =0;
    break;}

case 3: ///CASO 3: BUSCAR ANIVERSARIANTES POR MÊS;
    {
    fflush(stdin);
    printf("INFORME O MÊS PARA BUSCAR ANIVERSARIANTES: ");
    gets(comparar1);


    for(cont2=0; cont2<=cont; cont2 ++)
    {
        if(strcmp(funcionario[cont2].aniversario.mes, comparar1)==0)
        {
            printf("FUNCIONARIO COM ANIVERSARIO PARA O MÊS INFORMADO: \n\n"
                   "DADOS PESSOAIS:\n"
                   "NOME: %s\n"
                   "E-MAIL: %s\n"
                   "NUMERO DE TELEFONE: (%s) %s\n"
                   "\nENDERECO: \n"
                   "PAIS: %s\n"
                   "ESTADO: %s\n"
                   "CIDADE: %s\n"
                   "BAIRRO: %s\n"
                   "RUA: %s\n", funcionario[cont2].nome, funcionario[cont2].email,
                   funcionario[cont2].ddd, funcionario[cont2].numero_tel,
                   funcionario[cont2].local.pais, funcionario[cont2].local.estado,
                   funcionario[cont2].local.cidade, funcionario[cont2].local.bairro,
                   funcionario[cont2].local.rua);
            confirmacao ++;

        }
    }

    if(confirmacao == 0){
        printf("\nNÃO HÁ CADASTRO DE FUNCIONÁRIOS QUE FAÇAM ANIVERSÁRIO ESTE MÊS.\n"); }
    confirmacao =0;
    break;}

case 4: ///CASO 4: BUSCAR POR DIA E MÊS;
    {
        fflush(stdin);
        printf("INFORME O MÊS PARA BUSCAR ANIVERSARIANTES: ");
        gets(comparar1);
        printf("INFORME O DIA PARA BUSCAR ANIVERSARIANTES: ");
        gets(comparar2);


        for(cont2=0; cont2<=cont; cont2++)
        {
            if(strcmp(comparar1, funcionario[cont2].aniversario.mes)==0)
                if(strcmp(comparar2, funcionario[cont2].aniversario.dia)==0)
            {
                printf("FUNCIONARIO COM ANIVERSARIO PARA O DIA INFORMADO: \n\n"
                   "DADOS PESSOAIS:\n"
                   "NOME: %s\n"
                   "E-MAIL: %s\n"
                   "NUMERO DE TELEFONE: (%s) %s\n"
                   "\nENDERECO: \n"
                   "PAIS: %s\n"
                   "ESTADO: %s\n"
                   "CIDADE: %s\n"
                   "BAIRRO: %s\n"
                   "RUA: %s\n", funcionario[cont2].nome, funcionario[cont2].email,
                   funcionario[cont2].ddd, funcionario[cont2].numero_tel,
                   funcionario[cont2].local.pais, funcionario[cont2].local.estado,
                   funcionario[cont2].local.cidade, funcionario[cont2].local.bairro,
                   funcionario[cont2].local.rua);
            confirmacao ++;

        }
    }

    if(confirmacao == 0){
        printf("\nNÃO HÁ CADASTRO DE FUNCIONÁRIO(S) QUE FAÇAM ANIVERSÁRIO NESTE DIA.\n"); }
    confirmacao =0;
    break;}

case 5: ///CASO 5: FECHA O PROGRAMA;
    {
    escolha = 0;
    }
}

}while(escolha);

return 0;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.