Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Quando usar esse código ? e como o txt deve estar montado ? fscanf com retorno

Boa Tarde pessoal, estava lendo a explicação e li que eu posso usar este código para me retornar algo ... até ai tudo bem :

int n1, n2;

int sucesso = fscanf("%d %d", &n1, &n2);
if(sucesso == 2) {
    printf("Os dois números: %d e %d", n1, n2);
}
else {
    printf("Aconteceu um erro");
}

Apesar de que eu acho que falta indicar o file nesta linha:

int sucesso = fscanf(f, "%d %d", &n1, &n2);

Mas enfim, como o .txt deve estar montado para que o if seja verdadeiro ?

Obrigado, João Vitor.

4 respostas

Olá Joao Vitor

Está mesmo faltando o primeiro argumento do arquivo!

o fscanf retorna o número de matches capturados. Isso é, se ele conseguir pegar dois números do arquivo, vai retornar 2.

Precisa então estar, por exemplo:

123  456

Olá Paulo,

então eu imaginei que fosse dessa forma, porem ele me retorna else, vou postar o código e o txt:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

void abreTxt() {
    char c;
    FILE* f;
    f = fopen("jgitens.txt", "r");
    if (f == 0) {
        printf("Banco de dados não disponivel ...");
    }

    while(!feof(f)) {
        c = fgetc(f);
        printf("%c", c);
    }

    int n1, n2;

    int sucesso = fscanf(f, "%d %d", &n1, &n2);
    if(sucesso == 2) {
        printf("Os dois números: %d e %d", n1, n2);
    } else {
        printf("Aconteceu um erro");
    }

    fclose(f);
}

int main() {
    abreTxt();
}
9 123
BETERRABA
MELAO 
JANELA
CHINELO
PORTA
LARANJA
ARVORE
GOLFINHO
SEMENTE
solução!

O problema é que esse código abaixo:

  while(!feof(f)) {
        c = fgetc(f);
        printf("%c", c);
    }

já leu o arquivo todo e posicionou o ponteiro no fim do arquivo. Então, quando você faz o fscanf, ele não encontra mais nada, pois já está no EOF (end of file)

Você pode fechar e reabrir o arquivo depois desse while. Ou simplesmente remover esse while

Po interessante, agora foi, obrigado mesmo rs.

Té mais.