PDA

View Full Version : [C] Aiutino per semplice esercizio che non viene


D4rkAng3l
28-03-2006, 22:11
Ciao,
a laboratorio di programmazione ci è stato dato da fare questo semplice esercizio:
scrivere un programma che usi la funzione getchar, che legga dei caratteri sulla shell di linux e che conti quanti caratteri, quate parole e quante righe sono state inserite.

Dove la aprte sul numero dei caratteri funziona ma la parte sulle parole (incrmenta la var parole ogni carattere spazio che viene inserito) e la parte sulle righe (incrementa la variabile righe ogni volta che si preme invio) non funziona..dà 2 warning in fase di compilazione e quando lo vado ad eseguire questi due valori stanno sempre a 0....per favore potete aiutarmi a risolvere...la logica dovrebbe essere giusta...probabilmente sbaglio qualcosa nel contornto nelle due if


#include <stdio.h>

int main(){

int caratteri = 0;
int parole = 0;
int righe = 0;
int corrente;

corrente = getchar(); // Leggi il primo carattere dalla tastiera

while(corrente != EOF){

caratteri ++; // Incrementq il numero di caratteri letti

if(corrente == " ")
parole ++; // Ad ogni spazio incrementa il numero delle parole scritte

if(corrente == "\n") // Ad ogni invio incrementa il numero di righe
righe ++;

corrente = getchar(); // Leggi un nuovo carattere dalla tastiera
}

printf("\nSono stati letti: %d caratteri dalla tastiera\n", caratteri);
printf("\nIl numero di parole corrisponde a: %d\n", parole);
printf("\nIl numero di righe corrisponde a: %d\n\n", righe);

return 0;
}


Grazie
Andrea

Ziosilvio
28-03-2006, 22:24
la parte sulle parole (incrmenta la var parole ogni carattere spazio che viene inserito) e la parte sulle righe (incrementa la variabile righe ogni volta che si preme invio) non funziona
Le parole non si contano in quel modo, ma contando le volte in cui si passa da carattere non alfanumerico (cioè: non lettera né cifra decimale) a carattere alfanumerico.
dà 2 warning in fase di compilazione
Perché corrente è un int, mentre " " e "\n" sono stringhe.
I caratteri singoli si scrivono tra apici semplici, quindi i confronti vanno fatti con ' ' e '\n' rispettivamente.

D4rkAng3l
28-03-2006, 22:53
Le parole non si contano in quel modo, ma contando le volte in cui si passa da carattere non alfanumerico (cioè: non lettera né cifra decimale) a carattere alfanumerico.

Perché corrente è un int, mentre " " e "\n" sono stringhe.
I caratteri singoli si scrivono tra apici semplici, quindi i confronti vanno fatti con ' ' e '\n' rispettivamente.

Grazie...ho risolto...ora devo solo sistemare qualcosa della logica che non và (sull'esatto conteggio di righe e parole)

quindi se io faccio

int variabile; // dichiaro una variabile int
variabile = 'a'; // metto il valore numerico associato al carattere a in variabile?

Ancora grazie
Andrea

Ziosilvio
28-03-2006, 22:56
quindi se io faccio

int variabile; // dichiaro una variabile int
variabile = 'a'; // metto il valore numerico associato al carattere a in variabile?
Esattamente.