Jump to content
Fórum Script Brasil
  • 0

Uso da função fscanf();


Luiz_Junior

Question

Eu uso fscanf, mas quando eu do printf na variável que armazenou a stream, ela aparece o nome sem a primeira letra.

Observe:

#include <stdio.h>

char nome[1];
char leitura[1];

int main(void)
{
printf("Digite o nome: ");
scanf("%[^\n]",nome);
FILE *fp;
fp=fopen("lista","w+");
fprintf(fp,"%s",nome);
fscanf(fp,"%s",leitura);
fclose(fp);
printf("Nome: %s\n",leitura);

return 0;
}

Pelo que li o fscanf pula leitura de "tabs", acho que ele está considerando a leitura do nome na lista como tab.

Alguém pode me explicar o que está acontecendo e como resolver?

Edited by Durub
Adicionar tags code [Durub]
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

char nome[1];
char leitura[1];

Declarar um vetor de char com apenas uma posição é a mesma coisa que declarar um char único. Um vetor de char que armazene uma string deve possuir exatamente ou mais posições que a quantidade de caracteres que será digitado + um (espaço para o terminador nulo).

O fprintf() move o ponteiro para a posição final da string no arquivo após a escrita. O rewind() faz o ponteiro voltar à posição inicial, o que posibilita ler o dado do arquivo.

Se o nome digitado possuir espaços, e no fscanf() você ler apenas como '%s', ele vai retornar apenas a primeira parte do nome. O espaço funciona como um separador.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...