Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C] Problema con il Brian W. Kernighan & Dennis M. Ritchie

    Ciao,

    mi hanno passato questo libro di C dopo che mi è stato consigliato da diversi programmatori, definendolo la bibbia del C.

    Inizialmente ho avuto alcuni problemi, pensavo dati dall'utilizzo di C su win... quindi ho creato una macchina virtuale e ci ho infilato dentro Ubuntu.

    Ma i problemi sono continuati, faccio esattamente gli esercizi del libro ma alcuni non funzionano... poi magari tolgo una parentesi e lo compila correttamente, ma non fa quello che dovrebbe fare. C'è qualche problema con questo libro o sono tordo io?!?

    Ad esempio questo programmino che dovrebbe contare le nuove linee...


    codice:
    #include  <stdio.h>
    
    	/* conta le linee in input */
    	main()
    	{
    	    int c, n1;
    
    	    n1=0;
    	    while ((c=getchar()!= EOF)
    		  if (c=='\n')
    			++n1;
    	    printf("%d\n", n1);
    	}
    Non funge assolutamente... mi dice :

    contalinee.c: In function 'main':
    contalinee.c:10: error: expected ')' before 'if'
    contalinee.c:13: error: expected expression before '}' token

    Ho provato ad chiudere la tonda come lui si aspetterebbe... ho provato a metterne un altra prima del "!", poi ho provato a metterla dopo EOF...file compilato, ma non conta niente... ho provato anche a togliere una delle parentesi prima del getchar, stessa cosa...file compilato ma non funziona.

    Grazie



  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    il while ha una parentesi tonda in più, manca il return del main, c dovrebbe essere un char

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    La riga del while deve essere

    while ( ( c=getchar() ) != EOF )

    ... nota le parentesi ...


    P.S. Va bene che c sia un int ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    anche se dopo lo confronta con un '\n'?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    EDIT: vabbè troppo tardi...

    Il libro che ti hanno passato è stato scritto da coloro che hanno standardizzato il linguaggio (Ritchie ne è anche l'ideatore insieme a Thompson), e questo è più che una garanzia del suo valore.

    Per quanto riguarda quel codice, sei sicuro che sia scritto esattamente così sul libro?

    In ogni caso hai ragione, va messa una parentesi chiusa prima del simbolo ! e a quel punto funziona correttamente. E' chiaro che il ciclo leggerà caratteri fino al carattere di End Of File che di default dovrebbe essere ctrl+d o ctrl+z (mi pare cambia a seconda del sistema) e che a limite puoi anche ridefinire tu con una #define ma se hai cominciato a studiare il C da poco lascia stare...

    Insomma se stai su Ubuntu compila (dopo aver corretto quell'errore), scrivi tutte le righe che vuoi e poi dai "ctrl+d"; a quel punto ti si visualizzerà il numero delle righe che hai scritto.

    Comunque mi sembra davvero strano quell'errore in un libro come quello...
    every day above ground is a good one

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Originariamente inviato da Stoicenko
    anche se dopo lo confronta con un '\n'?
    Il prototipo prevede un int ... non ci sono problemi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Grazie a tutti per le risposte

    ho riprovato scrivendo :

    while ( ( c=getchar() ) != EOF )

    E il programma si compila, solo che non sapevo assolutamente del CTRL+D... e ci credo che non funzionava, io continuavo a mandare invio e basta

    Ho provato anche con CTRL+Z ma invece di contarmi le linee ed uscire dal programma, mi dice:

    ^Z
    [1]+ Stopped ./contalinee
    Ed esce dal programma, tornando nella cartella in cui è messo

    Boh, in ogni caso, ora funziona, grazie.

    Sembra strano anche a me quest'errore (ho ricontrollato) ma chissà magari un errore di stampa... ho visto ora un altro esempio ne quale il while è uguale ma non fanno l'errore della parentesi mancante.

    N.B. Sono a pagina 13 del libro...più inesperto di così si muore

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da J-MK
    E il programma si compila, solo che non sapevo assolutamente del CTRL+D... e ci credo che non funzionava, io continuavo a mandare invio e basta
    L'avevo intuito quando hai detto "file compilato, ma non conta niente", per questo avevo spiegato esplicitamente come fare

    Originariamente inviato da J-MK


    Ho provato anche con CTRL+Z ma invece di contarmi le linee ed uscire dal programma, mi dice:

    ^Z
    [1]+ Stopped ./contalinee
    Ed esce dal programma, tornando nella cartella in cui è messo
    Sì allora ctrl+z probabilmente è su Windows... non ricordavo. Su Linux comporta l'arresto del programma in esecuzione, ecco perché ti dice "Stopped ./contalinee"
    every day above ground is a good one

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Ctr-Z e invio --- su Windows

    Ctr-D --- su *nix
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.