|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Messaggi: 8826
|
Aiuto con primi programmi in c
Studiando dal Kernighan-Ritchie mi sono imbattuto in questo semplice programmino che però presenta un aspetto a me non del tutto chiaro:
il programma serve per il conteggio dei caratteri di un flusso proveniente da tastiera: #include <stdio.h> main() {long nc; nc=0; while (getchar() != EOF) ++nc; printf("%ld\n", nc);} Quello che non mi è chiaro è il significato ed il funzionamento dell'EOF (end of file). Infatti scrivendo while (getchar() != 'a') non appena inserisco una 'a' da tastiera il programma mi da il conteggio dei caratteri. Usando l'EOF invece come faccio a visualizzare questo risultato? Aiutatemi per favore perchè l'EOF è presente nella maggiorparte dei programmi che il libro presenta (copia tra file, conteggio delle linee ecc...)
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso" |
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Re: Aiuto con primi programmi in c
Quote:
Quel libro è vecchissimo, utilizza un "dialetto" di C che va prima della standardizzazione che non usa + nessuno. Non so come intenda l'EOF quel libro, comunque sostituisci '\n' con EOF nel programma e vedi che con un semplice invio ricevi il risultato. Se vuoi imparare il C, compera un libro recente. Va in giro il C99, imparare il C Kernighan e Ritchie nel 2003 non so se mi sembra il caso, visto che molti compilatori stanno eliminando pure il supporto. |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2000
Messaggi: 674
|
Ti conta i caratteri fino a che non scrivi il carattere "eof" (che dovrebbe essere "CTRL+z" in linux, in windows non so) il quale ti fa uscire dal ciclo
A questo punto ti stampa il numero di caratteri premuti. Cmq se hai problemi ascolta i consigli di mjordan: sostituisci EOF con '\n' (che non è altro che l'enter) oppure Ciao! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2001
Messaggi: 8826
|
Quello che ho io è la seconda ediziona basata sul linguaggio ansi C. Mi consigliate davvero di comprarne un altro? Potrebbe crearmi grossi problemi imparare da questo?
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso" |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2001
Messaggi: 8826
|
Quote:
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso" |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
uno dei + semplici (per iniziare è ovvio
programmare in C di peter Aitken & Bradley L. Jones
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2001
Messaggi: 8826
|
Quote:
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso" |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2001
Messaggi: 8826
|
Nessuno sa dirmi come si da l'EOF sotto Windows?
Dovrebbe essere ctrl+z (oppure ctrl+d) ma ho provato ed esce scritto ^Z (oppure ^D)... sapete aiutarmi?
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso" |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 356
|
Quote:
|
|
|
|
|
|
|
#11 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Comunque il C99 aggiunge diverse cose al C. Innanzitutto potenzia notevolmente la libreria matematica. Aggiunge il supporto per il numeri complessi e numeri immaginari. Elimina la regola dell'int implicito (unsigned long non vale più, bisogna scrivere unsigned long int), così come non specificare il tipo di ritorno di una funzione non vale +. Aggiunge il tipo di dati 'bool' per variabili booleane. Consente la dichiarazione di variabili in cicli e in mezzo a codice. Per esempio: Codice:
...
...
for (int i = 0; i < 10; i++) {
fai_qualcosa();
...
}
Codice:
int
main(int argc, char ** argv)
{
int i; /* Variabile */
printf("Ciao a tutti!\n"); /* Istruzione */
char ch; /* Altra variabile */
return 0;
}
Aggiunge gli array di lunghezza variabile. Per esempio: Codice:
void
my_func(int x, int y)
{
int my_array[x,y];
...
}
Aggiunge la parola riservata 'inline' per il function inlining. Aggiunge un pozzo di altra roba .... Un bel linguaggio. Il C è sempre + forte. |
|
|
|
|
|
|
#12 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Mi pare sia l'unico attualmente a trattare lo standard C99, inoltre presenta gli argomenti in maniera semplice, ma procede fino ad esempi + complessi. Gli ultimi capitoli sono una figata, anche se seguirli attentamente richiede moltissimo tempo. Ciao. |
|
|
|
|
|
|
#13 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 356
|
Quote:
E io che sto studiando su un libro ansi c che faccio ora? |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jan 2001
Messaggi: 8826
|
Quote:
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso" |
|
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Il qualificatore restrict non cambia la semantica dei programmi. Certo, se vuoi conoscere le nuove funzionalità devi comperare un libro che le descriva, come quello che ho consigliato prima, ma, in sostanza, il linguaggio non è stato cambiato. |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 356
|
Quote:
Il libro me lo ha dato mio cugino che lo aveva usato per l'universita di informatica A sto punto cosa mi consigliate?Devo veramente cambiare libro e prendere uno ultimo che parla di iso c?Mi pare che le differenze siano abbastanza sostanziali a partire dalle variabili logiche(o booleane)....pensate che nel mio libro a un certo punto dice:"In c non esistono variabili logiche come nel basic" |
|
|
|
|
|
|
#18 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Calmi calmi, state attenti tutti.
Il tipo bool è soltanto un typedef ad un intero, quindi in realtà non è strettamente necessario. Le regole abolite, come quelle dell'int implicito, sono state eliminate, ma sono differenze veramente marginali. In sostanza, a parte chi usa il Kernighan e Ritchie non deve "buttare" nulla. Tutto è applicabile e funzionante. Inoltre bisogna considerare che la totalità dei compilatori di default accetta la versione ANSI C 89 e successiva revisione C90 e quindi, per compilare programmi "strict C99" bisogna passare dei flag particolari. Per esempio, il seguente programma in ISO C 99: Codice:
#include <stdio.h>
#include <stdbool.h> // Il nuovo header per i tipi booleani.
int
main(void)
{
bool b[10]; // Array booleano. Questo è un commento su una sola riga.
for (int i = 0; i < 10; i++) // Dichiarazione di variabil ein un ciclo.
b[i] = false;
return 0;
}
Chi usa invece il C traditional (pre-ANSI K&R) dovrebbe aggiornarsi. Molti compilatori stanno eliminando i supporti. Per esempio gcc 3.4 eliminerà gran parte del supporto per il C traditional e molti costrutti non compileranno +, come ad esempio i prototipi del tipo: Codice:
void my_func(int, int); |
|
|
|
|
|
#19 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
|
|
|
|
|
#20 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Anche se il tipo quindi è _Bool, nei nuovi programmi dev'essere usato bool. Il fatto è che al momento dello standard si era visto che già diversi compilatori avevano già implementato il proprio tipo di dati booleano, quindi è stato scelto il nome _Bool per non rompere la compatibilità con le caratteristiche già esistenti. Per il resto, per il nuovo codice, basta usare bool. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:05.



















