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???
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
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;
}
cambia il tasto di uscita.RoyalEagle
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
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:
Questo perché lo standard input dovrebbe essere trattato dal C come 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*/
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
Così che esca con il dollaro, ma mi sembra uno soluzione troppo grezza (e se poi uno vuole scrivere qualcosa che parla di dollari?).Codice:while(c='$');
uhm non so se la cosa vi può aiutare, però dalla guida al c++:
http://www.cplusplus.com/reference/c...tdio/feof.html
perciò ritornaA 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.
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:
NON funziona.Codice:Ciao, questa è la prima riga <invio> seconda riga<invio> ultima riga^Z<invio>
Mentre se si scrive
funziona. Ma salva una riga vuota alla fine (il penultimo invio).Codice:Ciao, questa è la prima riga <invio> seconda riga<invio> ultima riga<invio> ^Z<invio>
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