Struct in C print nothing

Asked

Viewed 51 times

0

Hello, I am doing a program for college and have to add books in a struct and then print your data, I created a menu of options and used ifs as a switch, one of ifs is used to add books to struct and another to print the names of books, but when I run if to print the names program does not print anything and sometimes comes out even strange characters, I’ve used several cleaning methods like fflush(stdin), setbuf, fgets but nothing worked, when I try to print inside the first one if it prints correctly but in the other one it doesn’t, the problem only goes with strings the rest it prints normally, it follows the code. thanks for your attention.

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

struct livro{
    char titulo[30];
    char autor[30];
    char genero[30];
    int codigo;
    double preco;
};

void mostraTitulos(struct livro x){
    printf("%s\n", x.titulo);
}

main(){
    setlocale(LC_ALL, "portuguese");
    bool loop = true;
    struct livro colecao[50];
    char menu;
    int numLivros = 0;
    int i;
    while(loop){
        printf("Digite I para incluir um livro. \n");
        printf("Digite L para listar o nome de todos os livros. \n");
        printf("Digite A para procurar um livro por autor. \n");
        printf("Digite T para procurar um livro por título. \n");
        printf("Digite M para calcular a média de preço de todos os livros. \n");
        printf("Digite S para sair \n");
        scanf("%s", &menu);
        printf("\n");
        if(menu == 's' || menu == 'S'){
            loop = false;
        }
        if(menu == 'i' || menu == 'I'){
            printf("Digite o título do livro: ");
            scanf("%s", &colecao[numLivros].titulo);

            printf("Digite o autor do livro: ");
            scanf("%s", &colecao[numLivros].autor);

            printf("Digite o gênero do livro: ");
            scanf("%s", &colecao[numLivros].genero);

            printf("Digite o código do livro: ");
            scanf("%i", &colecao[numLivros].codigo);

            printf("Digite o preço do livro: ");
            scanf("%lf", &colecao[numLivros].preco);

            printf("Livro adicionado.\n");
            numLivros++;

        }

        if(menu == 'l' || menu == 'L'){
            for(i = 0; i < numLivros; i++){
                mostraTitulos(colecao[i]);
            }
        }
    }
    return 0;
}
  • Do not use the & in function scanf when reading a string. Since the Nenu variable is a char, not a char array, use: scanf("%c ", &menu);.

1 answer

0

Hello, Gabriel . To solve this problem you just have to declare your variable "int numLivros = 1;" . However, I would particularly do so:

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

struct livro{

char titulo[30];
char autor[30];
char genero[30];
int codigo;
double preco;

}colecao[50];



int main(){

setlocale(LC_ALL, "portuguese");
bool loop = true;
char menu;
int numLivros = 0;
int i;

while(loop){

    printf("Digite I para incluir um livro. \n");
    printf("Digite L para listar o nome de todos os livros. \n");
    printf("Digite A para procurar um livro por autor. \n");
    printf("Digite T para procurar um livro por título. \n");
    printf("Digite M para calcular a média de preço de todos os livros. \n");
    printf("Digite S para sair \n");
    scanf("%s", &menu);
    printf("\n");
    if(menu == 's' || menu == 'S'){
        loop = false;
    }
    if(menu == 'i' || menu == 'I'){
        printf("Digite o título do livro: ");
        scanf("%s", &colecao[numLivros].titulo);

        printf("Digite o autor do livro: ");
        scanf("%s", &colecao[numLivros].autor);

        printf("Digite o gênero do livro: ");
        scanf("%s", &colecao[numLivros].genero);

        printf("Digite o código do livro: ");
        scanf("%i", &colecao[numLivros].codigo);

        printf("Digite o preço do livro: ");
        scanf("%lf", &colecao[numLivros].preco);

        printf("Livro adicionado.\n");
        numLivros++;

    }

    if(menu == 'l' || menu == 'L'){
        for(i = 0; i < numLivros; i++){

        printf("%s \n",colecao[i].titulo);

        }
    }
}
return 0;
}
  • Hello, when a book is added the code increments + 1 the variable in Ivros, making the cycle of for work.

  • Why should I declare int numLivros = 1; in C the index of an array part of 0?

Browser other questions tagged

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