Input su file. come fargli vedere l'end of file?

di Anonimizzato10885 il
4 risposte
Ho questo programma, non sono ancora riuscito a controllarlo, per cui è sicuramente buggato. Non riesco a controllarlo perché non capisco come fagli capire che il file di input è finito. Cosa devo scrivere sul file? Mi va in un loop infinito subito.
Facendo una ricerca su internet, mi sembra di aver capito che dipenda dalla piattaforma che si usa (possibile??? secondo me ho capito male) Comunque io uso una distribuzione linux.
/*PROGRAMMER DGERO83
*
*Determine the following information about each value in a list of positive
* integers.
*a. is the value a multiple of 7, 11, or 13?
*b. is the sum of the digits odd or even?
*c. is the value a prime number?*/

#include <stdio.h>
void question_a(int data);
void question_b(int data);
void question_c(int data);
int
main(void)
{
    FILE *inp;
    int status,
        data;
    /*read numbers on file*/
    inp = fopen("numbers.txt", "r");
    status = fscanf(inp, "%d", &data);
    while (status |= EOF )   { /*Qui non capisco come dirgli di andare avanti fino alla fine del file e fermarsi*/
        /*answer question a*/
        question_a(data);
        /*answer question b*/
        question_b(data);
        /*answer question c*/
        question_c(data);
    }
    return(0);
}
void
question_a(data)
{
    int n,
        m;
    n = data % 7;
    if (n == 0) {
        m = n / 7;
        printf("%d / 7 is %d", n, m);
        }

    n = data % 11;
        if (n == 0) {
        m = n / 11;
        printf("%d / 11 is %d", n, m);
        }

    n = data % 13;
        if (n == 0) {
        m = n / 13;
        printf("%d / 13 is %d", n, m);
        }
}
void
question_b(data)
{
    int h,
        i,
        l,
        n,
        m;
    if (data >= 10){
        n = data % 10;  /*unità*/
        m = data - n;
        l = m / 10;     /*decine*/
        i = l + m;      /*sum of digits*/
        h = i % 2;
        if (h == 0) {
            printf("\nsum of digits of %d is %d, and it is even", data, i);
        }
        else    {
            printf("\nsum of digits of %d is %d, and it is odd", data, i);
        }
    }
    else {
        i = data % 2;
        if (i == 0){
            printf("sum of digits is %d, and it is even", data);
        }
        else {
            printf("sum of digits is %d and it is odd", data);
        }
    }
}
void
question_c(data)
{
    int i,
        j;
    for(i = 1;
        i < data;
        i += 1){
            j = data % i;
            if (j == 0){
            printf("\n %d is divisible by %d", data, i);
            }
    }
}

4 Risposte

  • Come mai c'è il punto esclamativo davanti alla funzione feof?
    while (!feof(pFile))
  • Perché letteralmente significa:
    "Cicla finché NON raggiungi la fine del file"
  • Feof( ) ritorna un valore TRUE se è stata raggiunta la fine del file (end of file EOF), altrimenti ritorna FALSE. Il ! indica il NOT, cioè la negazione logica. Quindi significa esegui il ciclo fino a quando non raggiungi la fine del file.
Devi accedere o registrarti per scrivere nel forum
4 risposte