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 functionscanf
when reading a string. Since the Nenu variable is a char, not a char array, use:scanf("%c ", &menu);
.– anonimo