• In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 13 di 13

Discussione: End Of File - EOF

Cambio titolo
  1. #1
    Arael Windwings L'avatar di RoyalEagle
    Registrato il
    11-03
    Località
    Pompei (NA)
    Messaggi
    5.636

    Esclamazione End Of File - EOF

    Ragazzi da quando ho rimesso WinzozzXP la combinazione di tast CTRL+Z nei miei programmi non funziona più.

    Invece di terminare il programma scrive qualcosa come ^Z!!!

    Soluzioni???





  2. #2
    Arael Windwings L'avatar di RoyalEagle
    Registrato il
    11-03
    Località
    Pompei (NA)
    Messaggi
    5.636
    Raga, è urgente e importante...





  3. #3
    Utente Personalizzato L'avatar di Rdn
    Registrato il
    12-04
    Località
    Roma
    Messaggi
    345
    purtroppo non ti so aiutare (anche perchè ctrl+z per chiudere un prog non lo ho mai usato) ma ho due piccoli dubbi:
    1. perchè non puoi usare alt+f4?
    2. ma è davvero così importante? O_O
    Membro del clan GRR, vienici a trovare www.grracers.it

  4. #4
    Arael Windwings L'avatar di RoyalEagle
    Registrato il
    11-03
    Località
    Pompei (NA)
    Messaggi
    5.636
    Vedi un pò te.

    Il fatto che su Windows 98 andava!

    /**********************************************************/
    /* Esercizio su FILE, simulazione grezza di una rubrica. *
    * Ogni riferimento ad opere, persone o eventi realmente *
    * accaduti è del tutto casuale. *
    * Original idea By a guy called Gian, *
    * nessun copyright vi è dovuto. *
    * *
    /**********************************************************/

    #include <stdio.h>

    main()
    {

    unsigned long int numero;
    char nome[20];
    char scelta;
    FILE *fPtr;

    //Si inizia!
    printf("Benvenuti in Rubrica v. 1.0.\n\n");
    printf("Questo programma crea o visualizza\n");
    printf("una rubbrica, contenente Nome e Numero.\n\n");
    //Scrivere o leggere?
    printf("Desideri Scrivere il file o Leggerne il contenuto (S/L)? ");
    scanf("%c", &scelta);
    //Scrivere!
    if (scelta == 's') {
    if ((fPtr = fopen("file.txt", "a")) == NULL)
    printf("\nIl file non può essere aperto, prego riprovare.\n");
    else {
    printf("\nInserisci il nome e il numero,\n");
    printf("digita CTRL+Z per uscire.\n");
    printf("* ");
    scanf("%s%d", nome, &numero);

    while(!feof(stdin)) {
    fprintf(fPtr,"%s %d\n", nome, numero);
    printf ("* ");
    scanf("%s%d", nome, &numero);
    }
    fclose(fPtr);
    }

    }
    //Leggere!
    if (scelta == 'l') {
    if ((fPtr = fopen("file.txt", "r")) == NULL)
    printf("\nIl file non puo' essere aperto, prego riprovare.\n");
    else {
    printf("\nNome e Numero:\n");
    fscanf(fPtr,"%s %d\n", nome, &numero);

    while(!feof(fPtr)) {
    printf ("* %-10s%d\n", nome, numero);
    fscanf(fPtr, "%s %d", nome, &numero);
    }
    fclose(fPtr);
    }
    }

    //Fine del programma!
    printf("\n");
    system("pause");
    return 0;

    }





  5. #5
    Nothing to no one L'avatar di Toad
    Registrato il
    07-03
    Località
    Vigevano
    Messaggi
    12.470
    Citazione RoyalEagle
    Ragazzi da quando ho rimesso WinzozzXP la combinazione di tast CTRL+Z nei miei programmi non funziona più.

    Invece di terminare il programma scrive qualcosa come ^Z!!!

    Soluzioni???
    cambia il tasto di uscita.

  6. #6
    Utente Personalizzato L'avatar di Rdn
    Registrato il
    12-04
    Località
    Roma
    Messaggi
    345
    ma per l'uscita di un prog in console... il tasto non era ctrl+c?
    Membro del clan GRR, vienici a trovare www.grracers.it

  7. #7
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.311
    quella è la terminazione

  8. #8
    Arael Windwings L'avatar di RoyalEagle
    Registrato il
    11-03
    Località
    Pompei (NA)
    Messaggi
    5.636
    Ma perchè su WIndows 98 andava bene e su XP non va più cavolo!

    Il manuale dice che è CTRL+Z!





  9. #9
    Re del Blu, Re del Mai L'avatar di jls
    Registrato il
    08-06
    Località
    steppa salentina
    Messaggi
    1.159
    Scusate se uppo questa discussione, ma ho lo stesso identico problema.

    Sul Deitel dice che in windows la combinazione di end of file è <ctrl>z, di conseguenza suggerisce di usare questo tipo di codice per inserire dei dati in un file:

    Codice:
      void scrivi(){
      char c;
      FILE *file; 
    
      printf("Inserisci il testo che vuoi salvare su myfile.txt, quando hai finito premi CTRL+Z\n");
      file = fopen("myfile.txt", "w");
      do{
      c=getchar();
      fputc(c, file);                     
      }while(!feof(stdin));
      fflush(stdin);
      fclose(file);
         
         
    }/*fine scrivi*/
    Questo perché lo standard input dovrebbe essere trattato dal C come un file.
    Ora quando uno prova a digitare ctrl + z invece di uscire dal ciclo while appare a schermo ^Z oppure ^z. Il dubbio che mi viene è che in win XP sia cambiata la combinazione di eof (???), qualcuno sa qual'è la nuova combinazione? O come risolvere il problema?

    In teoria si potrebbe usare un carattere speciale per l'uscita e scrivere qualcosa del tipo

    Codice:
    while(c='$');
    Così che esca con il dollaro, ma mi sembra uno soluzione troppo grezza (e se poi uno vuole scrivere qualcosa che parla di dollari?).

    "Sono un clown e faccio collezione di attimi"




  10. #10
    Cazzaro L'avatar di thor82
    Registrato il
    09-05
    Messaggi
    2.743
    uhm non so se la cosa vi pu&#242; aiutare, per&#242; dalla guida al c++:

    http://www.cplusplus.com/reference/c...tdio/feof.html



    A non-zero value is returned in the case that the End-of-File indicator associated with the stream is set.
    Otherwise, a zero value is returned.
    perci&#242; ritorna
    non zero -> eof is set
    zero -> eof non set

    secondo sta cosa in teoria i controlli del while dovrebbero essere invertiti...
    maybe?


  11. #11
    Re del Blu, Re del Mai L'avatar di jls
    Registrato il
    08-06
    Località
    steppa salentina
    Messaggi
    1.159
    Citazione thor82 Visualizza Messaggio
    uhm non so se la cosa vi può aiutare, però dalla guida al c++:

    http://www.cplusplus.com/reference/c...tdio/feof.html



    perciò ritorna
    non zero -> eof is set
    zero -> eof non set

    secondo sta cosa in teoria i controlli del while dovrebbero essere invertiti...
    maybe?
    No, perché in C (non C++, ma credo che in questo caso sia lo stesso) il while cicla se vero (eucip dice che i trailing decision ciclano per falso).

    Quindi zero=falso, non zero=vero
    Ovvero se il file non è finito, feof=falso=0, il contrario di falso è vero (c'è il punto esclamativo prima di feof), quindi il while cicla.
    Se il file è finito, feof=vero= non zero, il contrario di vero è falso, il while non cicla.


    Comunque credo di aver risolto il problema. Lo scrivo a testimonianza per i posteri.
    Scrivendo l'eof alla fine di una stringa di testo (quindi lo mettevo nel buffer alla fine) e premendo invio non funziona. Sembra che così non lo riconosca.
    Ma se si preme prima invio (ovvero svuota il buffer) e poi eof e di nuovo invio, funziona. In parole povere per far riconoscere l'eof deve stare da solo nel buffer (perché poi?). Faccio un esempio pratico. Se si scrive:

    Codice:
    Ciao, questa è la prima riga <invio>
    seconda riga<invio>
    ultima riga^Z<invio>
    NON funziona.
    Mentre se si scrive

    Codice:
    Ciao, questa è la prima riga <invio>
    seconda riga<invio>
    ultima riga<invio>
    ^Z<invio>
    funziona. Ma salva una riga vuota alla fine (il penultimo invio).

    Perché? Mistero della fede, visto che con Win 98 funzionano a tutti e due.

    "Sono un clown e faccio collezione di attimi"




  12. #12
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.311
    hai provato con ctrl+d ?

  13. #13
    Cazzaro L'avatar di thor82
    Registrato il
    09-05
    Messaggi
    2.743
    Citazione jls Visualizza Messaggio
    No, perché in C (non C++, ma credo che in questo caso sia lo stesso) il while cicla se vero (eucip dice che i trailing decision ciclano per falso).

    Quindi zero=falso, non zero=vero
    Ovvero se il file non è finito, feof=falso=0, il contrario di falso è vero (c'è il punto esclamativo prima di feof), quindi il while cicla.
    Se il file è finito, feof=vero= non zero, il contrario di vero è falso, il while non cicla.



    Perché? Mistero della fede, visto che con Win 98 funzionano a tutti e due.


    beh cielo so come funziona il while :P
    ma dalla descrizione di quel coso parrebbe che il risultato che dia sia l'inverso, ovvero che ritorni "non zero" quando è settato, perciò con il ! davanti viene 0...

    comunque sospetto che sia perchè controlli a mo di stringa / carattere
    pertanto "sdufhfsohfsd^Z" != "^Z"

    giusto per curiosità sarebbe da testare per cercare di fare in modo che controlli se la stringa CONTIENE ^Z


Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •