Newsgroup: it.comp.lang.c
Titolo: Programmino semplice

Ciao a tutti!
Sono alle prime armi con il C e stavo provando a compilare ed eseguire un
programmino preso da una guida (
http://snipurl.com/1rz8e
). Se non ho capito
male, dovrebbe contare i caratteri che vengono digitati, fino a quando non
si inserisce l'EOF.
Il programma non mi funziona. Accodo il sorgente alla fine del post.
Uso il Dev-C++ 4.9.9.2 e ho creato il progetto come se dovesse essere un
eseguibile da shell DOS. Automaticamente il programma aggiunge int argc,
char *argv[] come argomenti del main() e 
  system('PAUSE');	
  return 0;
alla fine.
Primo problema: su DOS (finestra di comando aperta da Windows) non riesco a
fare l'EOF, Ctrl+Z non dà niente, Ctrl+D neppure, Ctrl+C chiude tutto senza
fornire risultati.
Questi gli errori del compilatore:
[Warning] character constant too long for its type (riferito a
system('PAUSE');)
In function `main':
[Warning] passing arg 1 of `system' makes pointer from integer without a
cast 
Ho provato anche, anziché l'EOF, a dichiarare una variabile
char charend = 'r'
e scrivere
  while((ch = getchar()) != charend)
ma digitando la r su DOS non succedeva niente.
E' sbagliato il codice? O cos'altro?
Grazie a chiunque possa pazientemente aiutarmi,
Rocky3
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  int ch, i = 0;
  while((ch = getchar()) != EOF)
    i ++;
  printf("%d\n", i);
  system('PAUSE');	
  return 0;
}
-- 
"Il sapere e la ragione parlano, l'ignoranza ed il torto urlano".
Arturo Graf / Indro Montanelli / Anonimo

  system('PAUSE');
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#system
la sintassi di system prevede che gli si passi come argomento un 'const 
*char', cioč una stringa, dunque l'argomento va tra doppi apici [ 
system("PAUSE"); ]. Attenzione perň che se prendi l'abitudine di usare 
'system' finirai presto per scrivere programmi non portabili (su linux o 
altri sistemi operativi non funzionerebbe). Io di norma preferisco eseguire 
il programma dall'interprete dei comandi (su Windows, qualcosa del tipo 
Avvio->Esegui->cmd, inserisci il path del programma compilato) oppure, piů 
comodo, forzare lo svuotamento del buffer di tastiera col comando
while(getchar()!='\n');
che legge il carattere introdotto da tastiera (ed esegue un'istruzione nulla 
[1]) e lo "consuma" finché il carattere introdotto č un newline (invio), 
ossia attende l'invio prima di eseguire il "return 0;", istruzione che 
chiude il programma.
[1] forse ti č piů facile da capire scritto cosě:
while(getchar()!='\n')
    ;
-- 
We've all heard that a million monkeys banging on a million typewriters
will eventually reproduce the entire works of Shakespeare. Now, thanks
to the Internet, we know this is not true.      -- Robert Silensky
~> 
http://scriverefantascienza.blogspot.com/
 

 while(getchar()!='\n');
io sono più rozzo: alla fine, per non far chiudere la finestra metto un 
semplice
 getchar();
Per farla chiudere basta un pugno al centro della tastiera, senza 
cercare il tasto di invio.
saluti,
Peltio
che un suggerimento per l'OP l'avrebbe: dai una pedata nel culo ai 
programmi che scrivono codice al posto tuo e cercane altri che 
compilino il codice che scrivi tu.
-- 
Ma cosa studieranno mai al MIT? Scopri e scarica il materiale di 
centinaia di corsi universitari dal sito Opencourseware del 
Massachussets Institute of Technology: 
http://ocw.mit.edu/OcwWeb/index.htm
 (annuncio sponsorizzato dalla 
LIPSISC).

  system('PAUSE');	
Le stringhe, in C, si delimitano con doppi apici, non con apici
singoli:
system("PAUSE");

ossia attende l'invio prima di eseguire il "return 0;",
Per questo basta il getchar() singolo.

 system("PAUSE");
Mi sembrava di aver avuto dei problemi con i doppi apici... ma ok, proverò.
Grazie
Rocky3


 chiude il programma.
Perfetto, grazie a te e a Peltio!
Certo i programmi che inseriscono da sé frammenti di codice sarebbe meglio
tenerli "sotto controllo" :-).
Ciao!!
Rocky3


 Mi sembrava di aver avuto dei problemi con i doppi apici... ma ok,
Usa il carattere doppio apice, non due coppie di apici singoli.


 Mi sembrava di aver avuto dei problemi con i doppi apici... ma ok, proverň.
Sarň piů esplicito: usa " e non '
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 guida online :)
Già fatto :-D.
Grazie di nuovo :)
