web-dev-qa-db-fra.com

Comment trouver EOF via fscanf?

Je lis la matrice à travers le fichier à l'aide de fscanf (). Comment trouver l'EOF? Même si j'essaie de trouver EOF après chaque chaîne capturée dans arr [], je ne peux pas non plus la trouver.

avec l'aide de count je lis le fichier d'entrée

-12 23 3

1 2 4

int main()
{
    char arr[10],len;
    int count=0;

    FILE *input= fopen("input.txt", "r");

    while(count!=7)
    {   
           fscanf(input,"%s",arr);
          //storing the value of arr in some array.
                   len=strlen(arr);
           count++;

           if(arr[len+1]==EOF)
           printf("\ni caught it\n");//here we have to exit.
    }
return 0;
}

Au lieu de compter, je veux sortir de la boucle avec le EOF. Comment le résoudre?

17
karthik

fscanf - "En cas de succès, la fonction renvoie le nombre d'éléments lus avec succès. Ce nombre peut correspondre au nombre de lectures attendu ou être inférieur à zéro en cas d'échec de la correspondance. échec d'entrée avant que les données puissent être lues avec succès, EOF est retourné. "

Ainsi, au lieu de ne rien faire avec la valeur de retour comme vous le faites actuellement, vous pouvez vérifier si elle est == EOF.

Vous devez vérifier EOF lorsque vous appelez fscanf, et non vérifier l'emplacement de la baie pour EOF.

17
prelic
while (fscanf(input,"%s",arr) != EOF && count!=7) {
  len=strlen(arr); 
  count++; 
}
7
perilbrain

Si vous avez des entiers dans votre fichier, fscanf renvoie 1 jusqu'à ce que l'entier se produise. Par exemple:

FILE *in = fopen("./task.in", "r");
int length = 0;
int counter;
int sequence;

for ( int i = 0; i < 10; i++ ) {
    counter = fscanf(in, "%d", &sequence);
    if ( counter == 1 ) {
        length += 1;
    }
}

Pour connaître la fin du fichier avec des symboles, vous pouvez utiliser EOF. Par exemple:

char symbol;
FILE *in = fopen("./task.in", "r");

for ( ; fscanf(in, "%c", &symbol) != EOF; ) {
    printf("%c", symbol); 
}
4
transversus