• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema problema in programmino easy

Bluburro7

Utente Normale
Autore del topic
11 Settembre 2015
61
11
Miglior risposta
0
ragazzi ho cominciato da poco con C++ e stavo facendo questo programmino (il mio primo con i tipi char) ed ecco che viene fuori un problema:


#include <iostream>
using namespace std;


main()
{
//dichiarazioni
int i=725;
char imp[500];
//programma
cout << "ciao! Come ti chiami? ";
cin.getline (imp,500) ;
//per accesso admin
if (imp == "adminacces")
{
cout << "Accesso admin eseguito, benvenuto capo!";
}
else
{
cout << "\nciao " << imp
<< "\nio sono ale, il tuo programma\nin cosa posso aiutarti? (command per lista comandi)\n";
cin.getline(imp,100) ;
if (imp == "command")
{
cout << "\ncommand=vedi questa lista\n";
}
}
//ending program
system("PAUSE");
return 0;
}

if
(imp == "frase")
non funziona!
come devo fare?
peche non funziona?

grazie in anticipo

DIMENTICAVO:
se provo a mettere "frase"sotto forma di array ( abc[]="frase")
il programma parte ma me lo igniora quindi se io scrivo adminacces, non mi da "accesso admin eseguito..."
grazie ancora
 
Ultima modifica:
Perché complicarti la vita con le variabili char, che contiene solo 1 carattere, quando puoi usare string? :emoji_relieved:


Inviato dal mio  iPad Air 2 utilizzando Tapatalk 5.7 beta
 
  • Like
Reactions: 1 person
ragazzi ho cominciato da poco con C++ e stavo facendo questo programmino (il mio primo con i tipi char) ed ecco che viene fuori un problema:


#include <iostream>
using namespace std;


main()
{
//dichiarazioni
int i=725;
char imp[500];
//programma
cout << "ciao! Come ti chiami? ";
cin.getline (imp,500) ;
//per accesso admin
if (imp == "adminacces")
{
cout << "Accesso admin eseguito, benvenuto capo!";
}
else
{
cout << "\nciao " << imp
<< "\nio sono ale, il tuo programma\nin cosa posso aiutarti? (command per lista comandi)\n";
cin.getline(imp,100) ;
if (imp == "command")
{
cout << "\ncommand=vedi questa lista\n";
}
}
//ending program
system("PAUSE");
return 0;
}

if
(imp == "frase")
non funziona!
come devo fare?
peche non funziona?

grazie in anticipo

DIMENTICAVO:
se provo a mettere "frase"sotto forma di array ( abc[]="frase")
il programma parte ma me lo igniora quindi se io scrivo adminacces, non mi da "accesso admin eseguito..."
grazie ancora
Il vettore di char è assunto ad un puntatore char*. Quindi il confronto restituisce false. Se vuoi confrontare i contenuti di due stringhe devi usare la funzione strcmp della libreria cstring (
Perfavore, Entra oppure Registrati per vedere i Link!
) che non fa altro che comparare carattere per carattere

Perché complicarti la vita con le variabili char, che contiene solo 1 carattere, quando puoi usare string? :emoji_relieved:


Inviato dal mio  iPad Air 2 utilizzando Tapatalk 5.7 beta
string non è un tipo primitivo. Il modo classico per rappresentare stringhe senza usare oggetti è vederle come vettori di char.
 
  • Like
Reactions: 1 person
Il vettore di char è assunto ad un puntatore char*. Quindi il confronto restituisce false. Se vuoi confrontare i contenuti di due stringhe devi usare la funzione strcmp della libreria cstring (
Perfavore, Entra oppure Registrati per vedere i Link!
) che non fa altro che comparare carattere per carattere


string non è un tipo primitivo. Il modo classico per rappresentare stringhe senza usare oggetti è vederle come vettori di char.

Questo sì, ma capirai che fare un'unica variabile string invece che fare un vettore di char è molto più semplice e più rapido.. O almeno, io ho sempre fatto così e mi trovo molto meglio :emoji_slight_smile:

Il codice, ripulendolo, uscirebbe così:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Se vuoi prendere in input solo una parola, puoi al posto di getline usare il cin (del tipo cin >> variabile) :emoji_slight_smile:
 
Ultima modifica:
  • Like
Reactions: 1 person
Questo sì, ma capirai che fare un'unica variabile string invece che fare un vettore di char è molto più semplice e più rapido.. O almeno, io ho sempre fatto così e mi trovo molto meglio :emoji_slight_smile:

Il codice, ripulendolo, uscirebbe così:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Se vuoi prendere in input solo una parola, puoi al posto di getline usare il cin (del tipo cin >> variabile) :emoji_slight_smile:

ma se "imp" è la variabile, per cosa stà "cin?:emoji_confused:
e poi dopo //dichiarazioni il "string" c'è già nella libreria <iostream>?
ultima cosa: endl cosa fa?? non l'ho mai usato....>_>
grazie per il consiglio di usare cin >> variabile, ma era voluto il cin.getline al posto di cin >> seppur più complicato :emoji_smiley:

grazie a tutti^^
 
Ultima modifica:
Questo sì, ma capirai che fare un'unica variabile string invece che fare un vettore di char è molto più semplice e più rapido.. O almeno, io ho sempre fatto così e mi trovo molto meglio :emoji_slight_smile:

Il codice, ripulendolo, uscirebbe così:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Se vuoi prendere in input solo una parola, puoi al posto di getline usare il cin (del tipo cin >> variabile) :emoji_slight_smile:

Io lo vedo come un errore usare string senza sapere cosa è un oggetto. Vedere una stringa come vettore di char offre un accesso più diretto ed è opportuno utilizzarla quando si sta imparando il linguaggio.
 
ma se "imp" è la variabile, per cosa stà "cin?:emoji_confused:
e poi dopo //dichiarazioni il "string" c'è già nella libreria <iostream>?
ultima cosa: endl cosa fa?? non l'ho mai usato....>_>
grazie per il consiglio di usare cin >> variabile, ma era voluto il cin.getline al posto di cin >> seppur più complicato :emoji_smiley:

grazie a tutti^^

cout: console out: stampa qualcosa (ad esempio cout << "ciao" << endl; )
cin: console in: prende qualcosa in input, ma a differenza del getline non accetta degli spazi (ad esempio cin >> variabile).

L'end line (che si scrive in codice come endl) serve appunto per andare a capo, al posto di scrivere \n :emoji_slight_smile: