PDA

View Full Version : [C] minuscole in maiuscole!!!


giggikr
15-12-2009, 19:00
ciao ragazzi, per esercizio sto cercando di far un programmino semplice..senza funzioni, che riesca a convertire una stringa di minuscole in lettere maiuscole:

il problema è che se inserisco una frase con spazio, esempio ciao bella
mi da in output solo CIAO cioè si blocca allo spazio!!!
quale è il problema?

ecco il codice:
/* programma che converte una stringa minuscola in una stringa maiuscola */
#include <stdio.h>

int main()
{
char str[100];
int i,cont = 0;

scanf("%s", str);


//creo la f strlen che conta quanto è lunga la stringa

for ( i = 0 ; str[i] != '\0' ; i++)
cont++;



i = 0;

if(
for( i = 0 ; i < cont ; i++)

str[i] = str[i]-32;

printf("%s\n", str);


return 0;
}

wingman87
15-12-2009, 19:07
Perché scanf si ferma quando incontra un carattere "whitespace". Per leggere l'intera riga inserita puoi usare gets: LINK (http://www.cplusplus.com/reference/clibrary/cstdio/gets/)
Nota quello che c'è scritto nella descrizione nel link che ti ho riportato: sarebbe più sicuro utilizzare fgets con parametro stdin perché puoi specificare un massimo di caratteri da leggere e l'altra differenza (che non lo rende più sicuro ma è una differenza) è che fgets include il carattere di newline (\n) mentre gets no.

cionci
15-12-2009, 20:08
Meglio imparare a non usare mai gets, ma solo fgets mettendo stdin come ultimo parametro.
http://www.cplusplus.com/reference/clibrary/cstdio/fgets/

C' un modo semplicissimo per fare quel programma usando getchar e putchar fino a quando non si legge l'invio.

M4rk191
15-12-2009, 20:12
Le funzioni isspace e isalpha fanno al caso tuo. Dovresti sapere che la differenza tra un carattere minuscolo e uno maiuscolo è una costante, puoi usare quella e addizionare/sottrarre a seconda delle esigenze, se non vuoi usare le funzioni della libreria standard.

cionci
16-12-2009, 08:28
La costante si può esprimere come 'a' - 'A' ;)
Basta controllare che sia un carattere minuscolo, quindi isalpha ed isspace non gli servono. Se è un carattere minuscolo modifico il carattere.

fero86
16-12-2009, 12:05
format string alternativo per scanf: "%80[^\n]"
il numero 80 indica che la scanf deve leggere al massimo 80 caratteri incluso NUL, quindi l'argomento successivo deve essere un puntatore ad un vettore di 80 char:

char szLine[80];
if (scanf("%80[^\n]", szLine) < 1)
{
// errore di I/O
}


il motivo per cui ne ho messi 80 é che tipicamente i terminali e le consoles hanno righe da 80 caratteri.