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

di il
4 risposte

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

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

Devi accedere o registrarti per scrivere nel forum
4 risposte