Error in program C, store in vector;

3

Good evening, I'm doing a C program that should read 20 entries with interviewed data.

I was able to work everything out, but in the matter of reading this data I'm having a strange error ... (It could be Turbo C thing) ...

In short, I can insert some records and after that it drops back into the program menu ... (Enter an option ...)

My questions are:

  • Is this the best way to store data entry?
  • What did I do wrong?

This is the script:

#include <stdio.h>
#include <iostream.h>
#include <conio.h>

/*
    - Nome (máximo de 30 caracteres).
    - Idade.
    - Sexo.
    - Quantidade de filhos.
    - Renda mensal familiar.
*/
    struct infoPessoa{
        char nome[30];
        char sexo;
        int idade;
        int nFilhos;
        float renda_familiar;
    };

    // erro estupido por não encontrar referencia...
    void dummy()
    {
        float f,*fp;
        fp=&f;
    }

    void main ()
    {
        // declaração de variaveis
        const int tamanho=20;
        char opcao;
        int i, escolha_valida;
        int saida = 0;
        infoPessoa entrevistados[tamanho]; // 20 pessoas. 

        while( saida == 0 ) {
            escolha_valida = 0;
            while( escolha_valida == 0 ) {
                printf("C - Cadastrar entrevistados:\nL - Listar entrevistados:\nR - Relatorios:\nS - Sair:\n");
                printf("Digite a opcao:\n");
                scanf("   %c", &opcao );
                if((opcao=='C') || (opcao=='L') || (opcao=='R') || (opcao=='S'))
                    escolha_valida = 1;
                else
                    printf("
#include <stdio.h>
#include <iostream.h>
#include <conio.h>

/*
    - Nome (máximo de 30 caracteres).
    - Idade.
    - Sexo.
    - Quantidade de filhos.
    - Renda mensal familiar.
*/
    struct infoPessoa{
        char nome[30];
        char sexo;
        int idade;
        int nFilhos;
        float renda_familiar;
    };

    // erro estupido por não encontrar referencia...
    void dummy()
    {
        float f,*fp;
        fp=&f;
    }

    void main ()
    {
        // declaração de variaveis
        const int tamanho=20;
        char opcao;
        int i, escolha_valida;
        int saida = 0;
        infoPessoa entrevistados[tamanho]; // 20 pessoas. 

        while( saida == 0 ) {
            escolha_valida = 0;
            while( escolha_valida == 0 ) {
                printf("C - Cadastrar entrevistados:\nL - Listar entrevistados:\nR - Relatorios:\nS - Sair:\n");
                printf("Digite a opcao:\n");
                scanf("   %c", &opcao );
                if((opcao=='C') || (opcao=='L') || (opcao=='R') || (opcao=='S'))
                    escolha_valida = 1;
                else
                    printf("%pre%7Erro. Opcao do menu invalida.\n");
            }

            switch( opcao ) {
                case 'C' :
                    clrscr();

                    for (i=0; i<20; i++)
                    {
                        printf("Digite o nome do entrevistado %d:\n", i+1 );
                        scanf(" %s",entrevistados[i].nome);

                        printf("Digite o sexo (M) OU (F):\n");
                        scanf(" %c", entrevistados[i].sexo);

                        printf("Digite a idade:\n");
                        scanf(" %d", entrevistados[i].idade);

                        printf("Quantos filhos?:\n");
                        scanf(" %d", entrevistados[i].nFilhos);

                        printf("Valor da renda familiar:\n");
                        scanf(" %f", entrevistados[i].renda_familiar);
                    }
                    break;

                case 'L' :
                    clrscr();


                    break;
                case 'R' :

                    /*
                        Com base nos dados coletados, apresente na tela as seguintes informações:
                        - Percentual de mulheres e homens.
                        - Número de pessoas que ganham acima de 500.00 (quinhentos reais).
                        - Percentual de pessoas que tem ao menos 1 filho.
                        - Número de pessoas que nasceram a partir do ano 2000.
                    */
                    break;
                case 'S': saida = 1; break;
            }
        }
    }   
7Erro. Opcao do menu invalida.\n"); } switch( opcao ) { case 'C' : clrscr(); for (i=0; i<20; i++) { printf("Digite o nome do entrevistado %d:\n", i+1 ); scanf(" %s",entrevistados[i].nome); printf("Digite o sexo (M) OU (F):\n"); scanf(" %c", entrevistados[i].sexo); printf("Digite a idade:\n"); scanf(" %d", entrevistados[i].idade); printf("Quantos filhos?:\n"); scanf(" %d", entrevistados[i].nFilhos); printf("Valor da renda familiar:\n"); scanf(" %f", entrevistados[i].renda_familiar); } break; case 'L' : clrscr(); break; case 'R' : /* Com base nos dados coletados, apresente na tela as seguintes informações: - Percentual de mulheres e homens. - Número de pessoas que ganham acima de 500.00 (quinhentos reais). - Percentual de pessoas que tem ao menos 1 filho. - Número de pessoas que nasceram a partir do ano 2000. */ break; case 'S': saida = 1; break; } } }
    
asked by anonymous 13.07.2016 / 04:26

1 answer

5

In C does not have the iostream library, then use only stdio.h .

The declaration of entrevistados is wrong, as it is a struct , should declare as

struct infoPessoa entrevistados[tamanho];

Replication while( escolha_valida == 0 ) is redundant, should not have this line in the code.

Where you are using scanf there should be no space within the quotation marks:

scanf(" %d", &n) // Errado
scanf("%d", &n) // Correto

You also did not set & to reading char , int , and float . The string should not have & .

In order for the system to read the character for gender, use \n before %c .

scanf("\n%c", &entrevistados[i].sexo);
    
13.07.2016 / 06:59