[c++] stampare frasi con array di char

Oo.Stud.ssa.oO
ciao a tutti!
Ma usando c++, come si stampa un'intera frase?
Così come l'ho messo io stampa solo una lettera..
char Richieste[MAX];
            for(i=0;i<3;i++){
            cout<<"Richiesta:";
            cin>>Richieste[i];
            }
cout<<"Richieste:"<<Richieste;

Come si fa a stampare un'intera frase?

Risposte
claudio862
"Richieste" è un array di MAX char. Nel ciclo tu chiedi all'utente di inserire i primi tre caratteri. Poi stampi l'intero array (che probabilmente non avrà un corretto terminatore (zero).

Non capisco bene la domanda, ma forse ti aspettavi che "Richieste" fosse un array di MAX stringhe. Non è così, è un array di MAX caratteri. Prova a spiegare cosa vuoi fare ad un livello più alto.

Oo.Stud.ssa.oO
Ma semplicemente volevo capire come stampare una frase..
forse ho impostato male quel pezzo di codice!
In pratica avendo un array di char, non posso riempirlo con una frase intera e poi stamparlo?

vict85
A me visualizza tutto, anche se trovo non sia un buon modo per caricare le informazioni. Il tutto viene visualizzato in modo molto strano se non premi invio subito dopo il carattere (prova). Detto questo evidenzierei che dovresti inserire in terminatore di stringa dopo tutti gli elementi se vuoi visualizzare le richieste come stringhe. Insomma, il problema è che il tuo modo di caricare le cose è molto problematico. La stampa invece è corretta.

vict85
Per vedere che è corretto prova questo codice:
char Affermazione[] = "Sono il re del mondo"; 
cout<<Affermazione;
vedrai che tutto funziona come dovrebbe.

claudio862
Sì, ma nel ciclo for chiedi un carattere alla volta, per i primi tre caratteri, senza inserire il terminatore finale.

Prova con qualcosa del genere:

#include <iostream>
#include <string>

#include <cstdio>

int main()
{
    const int MAX = 50;
    char Richieste[MAX];

    std::fgets(Richieste, MAX - 1, stdin);

    std::cout << "Richieste: " << Richieste << '\n';

    // Alternativa, usando std::string invece di un array di char.
    std::string Richieste2;
    std::getline(std::cin, Richieste2);

    std::cout << "Richieste2: " << Richieste2 << '\n';
}

Oo.Stud.ssa.oO
"vict85":
Per vedere che è corretto prova questo codice:
char Affermazione[] = "Sono il re del mondo"; 
cout<<Affermazione;
vedrai che tutto funziona come dovrebbe.


Ok!! Basta non mettere le quadre in pratica!
Invece per ricevere da tastiera la frase e stamparla basta usare gets() al posto di cin<< giusto?

claudio862
"Oo.tania":
Invece per ricevere da tastiera la frase e stamparla basta usare gets() al posto di cin<< giusto?

fgets, non gets. Oppure std::getline se usi std::string (che secondo me è meglio nella stragrande maggioranza dei casi).

Oo.Stud.ssa.oO
"claudio86":
[quote="Oo.tania"]Invece per ricevere da tastiera la frase e stamparla basta usare gets() al posto di cin<< giusto?

fgets, non gets. Oppure std::getline se usi std::string (che secondo me è meglio nella stragrande maggioranza dei casi).[/quote]
Perchè non gets?
Ma per fgets serve qualche libreria? mi da errore..

claudio862
Con gets non hai modo di accorgerti se l'utente inserisce una stringa più lunga della capacità dell'array. Per usarla includi l'header .

Oo.Stud.ssa.oO
"claudio86":
Con gets non hai modo di accorgerti se l'utente inserisce una stringa più lunga della capacità dell'array. Per usarla includi l'header .


Mi da questo errore
 too few arguments to function `char* fgets(char*, int, FILE*)' 
 at this point in file 

vict85
"Oo.tania":
[quote="vict85"]Per vedere che è corretto prova questo codice:
char Affermazione[] = "Sono il re del mondo"; 
cout<<Affermazione;
vedrai che tutto funziona come dovrebbe.


Ok!! Basta non mettere le quadre in pratica!
Invece per ricevere da tastiera la frase e stamparla basta usare gets() al posto di cin<< giusto?[/quote]

No, il non mettere nulla tra le quadre ha il solo scopo di non dover contare le lettere della frase che ho messo (il C mette in automatico la dimensione che va bene).

Oo.Stud.ssa.oO
Si intendevo nel "cout", basta non mettere
cout<<affermazione[i]

perchè in effetti così facendo seleziono il carattere da stampare..

vict85
Si, è così.

Obidream
"Oo.tania":
[quote="claudio86"]Con gets non hai modo di accorgerti se l'utente inserisce una stringa più lunga della capacità dell'array. Per usarla includi l'header .


Mi da questo errore
 too few arguments to function `char* fgets(char*, int, FILE*)' 
 at this point in file 
[/quote]
In effetti ti sta dicendo che la fgets va usata in questo modo :)
fgets(stringa,LUNGHEZZA_STRINGA,stdin);

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.