I'm having trouble reading a string inside a function

0

Good night, I would like to know methods to read a string in C (Version C99), I already tried a lot, and it does not work, below, the defective code.

Note: The error I am reporting is that shortly after pressing "ENTER" on the first 'gets' of the function register, the program buga, and displays the message "program.exe stopped working ".

Obs.1: I removed the < > of includes because the browser identifies this as an html tag and does not display the contents of the includes.

#include stdio.h
#include stdlib.h

int menu()
{
    int opc;
    printf("\n Opcoes: \n1. Cadastrar livros\n2. Consultar livros\n3. Alterar informacoes de livros\n4. Remover um livro da lista");
    scanf("%d", &opc);
    return(opc);
}
struct informacoes
{
    char nome[100];
    char autor[100];
    long long int isbn;
    char volume[10];
    int data;
    char editora[100];
    int paginas;
};
int cadastro(struct informacoes *livros, int i){
    printf("\nNome do livro: ");
    gets(livros[i].nome);
    printf("\nAutor: ");
    gets(livros[i].autor);
    printf("\n ISBN : ");
    scanf("%lli", livros[i].isbn);
    printf("\n Volume em romanos: ");
    gets(livros[i].volume);
    printf("\n Ano de lancamento: ");
    scanf("%d", livros[i].data);
    printf("\nEditora do livro: ");
    gets(livros[i].editora);
    printf("\nQuantidade de paginas no livro: ");
    scanf("%d", livros[i].paginas);
}
int main() 
{
    int opc = menu();
    struct informacoes livros[10];
    int i=0;
    switch(opc)
    {
        case 1:
            cadastro(livros, &i);
    }
    return (EXIT_SUCCESS);
}
    
asked by anonymous 05.07.2017 / 00:26

2 answers

1

Your code actually has several errors, the 2 clearest ones are:

  • You can not send a pointer to a method that asks you for an integer value as a parameter:
  • Where you put it:

    cadastro(livros, &i);
    

    Switch By:

    cadastro(livros, i); //Note que não possui o &
    
  • The method cadastro is of type int plus it does not return any value, put it of type void , that is, it returns nothing:
  • Where you put it:

    int cadastro(struct informacoes *livros, int i){
    

    Switch By:

    void cadastro(struct informacoes *livros, int i){
    
        
    05.07.2017 / 01:59
    0

    Do this:

    scanf ("% [^ \ n] s", variable_name);

        
    05.07.2017 / 00:48