Jump to content

Recommended Posts

Posted (edited)

Boa tarde,

Estou a fazer uma gestão de biblioteca, tenho um problema, quando estou a dar espaço entre palavras no registo de algum dado, o programa começa a escrever numeros e não faz o que foi solicitado.

Podem ajudar pff!

Obrigado

void registra(char nome[100], int ano, char editora[100] ) {
 FILE *fd;
 fd=fopen("BD_livro.txt","a"); /* criar ficheiro*/
 fprintf(fd, "%s\n", nome);
 fprintf(fd, "%d\n", ano);

 fprintf(fd, "%s\n", editora);
 printf("\n\tDados registrados!\n");
 fclose(fd);
 getchar();
}
Edited by thoga31
GeSHi

Live for ever

Posted (edited)

Sorry, coloqueio mal o codigo,

segue em baixo o codigo que estou a usar.

int main(void) {
FILE *fd;
int menu,ano;
char nome[100];

char editora[100];
while (menu!=0) {
limpa();
printf("\n\t Biblioteca\n");
printf("\n\t(1)\tRegistrar Livro.");
printf("\n\t(2)\tProcurar Livro.");
printf("\n\t(3)\tLista de Livros.");
printf("\n\t(4)\tLimpar Livro.");
printf("\n\t(5)\tSobre.");
printf("\n\n\t(0)\tSair.");
printf(" ");
scanf("%d",&menu);
getchar();
switch (menu) {
{
 case 1: {
 printf("\n\tEntre com o Nome: ");
 scanf("%s",&nome);


 printf("\n\tAno de edicao: ");
 scanf("%d",&ano);
 getchar();

 printf("\n\tEditora: ");
 scanf("%s",&editora);
 getchar();
 registra(nome, ano, editora);

 }
 } break;
Edited by pmg
Falta LP no GeSHi

Live for ever

Posted

Boas, tentei o que me indicaram, em baixo o que eu fiz, mas continua na mesma, e agora ele quando dou o espaço e escreve a primeira string e depois dá um numero qualquer no ano de edição e a segunda string na editora!

case 1: {
    printf("\n\tQual o Nome: ");
   // scanf("%s",&nome);

    if (!fgets(nome,100,stdin))
    {
							   printf("Erro tente novamente");
							   }

Live for ever

Posted

Exemplo se digitar,

lisboa nova

eis o output:

lisboa

2686828

ova

e apos dar enter ele não deixa colocar mais nada, apenas o nome do livro, e como se pode deparar, ele remove a primeira letra da segunda String

int main(void) {
 FILE *fd;
 int menu,ano;
 char nome[100];

 char editora[100];
 while (menu!=0) {
   limpa();
   printf("\n\t Biblioteca\n");
   printf("\n\t(1)\tRegistrar Livro.");
   printf("\n\t(2)\tProcurar Livro.");
   printf("\n\t(3)\tLista de Livros.");
   printf("\n\t(4)\tLimpar Livro.");
   printf("\n\t(5)\tSobre.");
   printf("\n\n\t(0)\tSair.");
   printf(" ");
   scanf("%d",&menu);
   getchar();
   switch (menu) {
   {
     case 1: {
       printf("\n\tQual o Nome: ");


       if (!fgets(nome,100,stdin))
       {
          printf("Erro tente novamente");
       }
       //  scanf("%s",&nome);

       printf("\n\tAno de edicao: ");
       scanf("%d",&ano);
       getchar();

       printf("\n\tEditora: ");
       scanf("%s",&editora);
       getchar();
       registra(nome, ano, editora);

     }
     } break;

Live for ever

  • 2 weeks later...
Posted

Quando usas "%s" no scanf, esse "%s" nao 'apanha' espacos.

Se o nome da editora for "Editora Nova" o scanf para no espaco (que e apanhado com o getchar()) ficando "Nova" no input para o ano de edicao!

Sugestao: nao uses scanf() para input do utilizador. Prefere fgets() e tratamento posterior da string.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

printf("\n\tQual o nome do Livro: ");
fgets(nome, 100, stdin);

apenas estou com este código para registar o nome do livro.

isso já tinhas dito, eu disso para apresentares "o código"

já que estás renitente em apresentar, ao menos indica o que queres dizer com :

mas não esta a resultar

IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.