Newsgroup: it.comp.lang.c
Titolo: Aiuto newbie

Salve,
Sono nuovo della programmazione in C, e lo sto studiando dal libro
"Linguaggio C" che voi di questo ng mi avevate consigliato tempo fa :)
Ora vorrei scrivere un programma che da un file legga ad esempio il seguente
testo:
abcd
abcd
abcd
abcd
E lo copi su un altro file ma con un elemento sovrascritto da un altro
carattere (definito nel programma stesso), ad esempio fargli scrivere:
Xbcd
abcd
abcd
abcd
aXcd
abcd
abcd
abcd
...
Ecc. passando la X da carattere a carattere e stampando gli altri uguali
(sempre nello stesso file). Ho provato a scriverlo da solo ma e' stato un
disastro, stampa solo le prime due righe :(.
Lo so che mi sono spiegato malissimo comunque spero che qualcuno abbia la
pazienza di aiutarmi :).
Bye,
Francesco.

Non ho capito bene. Vorresti che un certo carattere sia sostituito, ma come
e quale?
Può avere senso questo?
#define    DA_CAMBIARE 2
#include <stdio.h>
void main(){
int    contatore;
char carattere;
for (contatore = 1; !feof(stdin); contatore++){
    carattere = getchar();
    if (contatore == DA_CAMBIARE)
         putchar ('X');
    else
        putchar (carattere);
}
}
Puoi chiamarlo "cambia.c", e chiamarlo con le redirezioni:
cambia <input.txt >output.txt
--
Alessandro Monti

you wrote :
#void main(){
void main() non e' standard, quante volte bisogna ripeterlo ?
--------------------------------------------------------
* Andrea Laforgia        (
andrea_...@bigfoot.com
) *
--------------------------------------------------------

 void main() non e' standard, quante volte bisogna ripeterlo ?
Finché ci sarà gente che studia sullo Schildt? :-)
EMG


Francesco

 Finché ci sarà gente che studia sullo Schildt? :-)
Neanche lo conosco. Semmai il problema è che ho studiato e appreso il C
parecchio tempo fa.
Comunque, se fa piacere, d'ora in poi posterò codice come volete voi. Anche
se a me non piace vedere un return 0 inutile.
Senza offesa. (anche perchè non mi pare il caso)
--
Alessandro Monti

 Finché ci sarà gente che studia sullo Schildt? :-)
  A dire il vero, anche tutti gli esempi sulla X library hanno questo
formato... Mi sono sempre chiesto perche`.
	Alla prossima,
		Marco

 valore se int. Questo diceva K&R 2ed. standard ANSI.
Ti sbagli. La forma void main() non è mai stata contemplata dallo
standard.
EMG

> > void main() non e' standard, quante volte bisogna ripeterlo ?
AM>Fin quando il compilatore non mi da' warning e soprattutto compila giusto.
Scusa, come motivo e' abbastanza scadente:
Da un 'C tips' trovato sulla rete  a proposito di 'void main()' 8)
---------------------------------------------------------------------------
    4. It works on my compiler.
[...]
    4. The standards for the C and C++ programming languages specifically
       allow compiler writers to include extensions. In addition, the
       usual tradition is for a compiler to process your program and
       generate an executable if at all possible, even if your source
       code is questionable. The International Standard for each
       programming language defines what the language is, not whatever
       any particular compiler happens to accept. Most C compilers have
       some type of option to compile in strict standard mode. Again
       Microsoft is one of the worst offenders here. There is no way that
       I know of to get their compilers to issue an error or even a
       warning message if you define a void main() function in your code.
---------------------------------------------------------------------------
AM>E poi, se non è cambiato negli ultimi 5 anni, lo standard diceva che erano
AM>entrambe forme ammesse, purchè poi ci fosse un return se void e un return
AM>valore se int. 
Be'...nessuna delle mie fonti conferma. Tra l'altro, nel testo di
prima viene riportato:
---------------------------------------------------------------------------
    ANSI/ISO/IEC 9899:1990 International Standard For C
     The function called at program startup is named main . The
     implementation declares no prototype for this function. It can be
     defined with no parameters:
     int main(void) { /* ... */ }
     or with two parameters (referred to here as argc and argv, though
     any names may be used, as they are local to the function in which
     they are declared):
     int main(int argc, char *argv[ ]) { /* ... */ }
---------------------------------------------------------------------------
Purtroppo non ho modo di controllare. Nessuno ha sotto mano lo Standard ?
AM>Questo diceva K&R 2ed. standard ANSI.
Dove ? Il libro ce l'ho ma non riesco a trovare il riferimento...
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

you wrote :
#> > void main() non e' standard, quante volte bisogna ripeterlo ?
#Fin quando il compilatore non mi da' warning e soprattutto compila giusto.
Correggo : finquando capirai che non tutti usano il tuo compilatore e
che lo standard non ammette una forma del genere.
Non mi spreco a ripetere cose trite e ritrite : leggi attentamente le
FAQ del gruppo comp.lang.c.


Ok, mi ricordavo male. Era nei parametri che ammetteva void.
Scusate l'errore.
Prometto che d'ora in poi userò solo
int main (...)
(dove i puntini, a differenza del C, qui indicano solo che a seconda dei
casi userò void o argc e argv)
Mi prostro ai piedi dello standard.
(a proposito, non è solo Microsoft a fare compilatori "permissivi")
Cercherò l'opzione per attivare, oltre al warning, un ceffone in faccia
appena mi azzardo a non rispettare lo standard :)
--
Alessandro Monti

Ciao Andrea, come va?
  La funzione /main/ ritorna un valore intero per motivi di interazione
con il sistema operativo: il valore ritornato viene passato come /exit/
/value/ al termine dell'esecuzione e puo` essere elaborato dai programmi
chiamanti per ulteriori valutazioni. Poiche` il C nasce insieme a UNIX,
e sotto UNIX le catene di comandi sono molto utilizzate, e` bene
attenersi a questa regola.
	Alla prossima,
		Marco