PDA

View Full Version : [C++][Eclipse Helios] La funzione strcmp non funziona. Cosa diamine ho sbagliato?


fdm91hu
14-10-2010, 18:35
Ciao ragazzi, sto seguendo un corso di fondamenti di informatica e quindi mi tocca approfondire le mie già scarse (anzi, scarsissime) conoscenze del c++.
Il prof ci ha dato da fare un programma che in base a delle domande a cui tu rispondi ti assegna dei punti e poi ti dice la percentuale del tuo stato di salute. Ho pensato di usare la funzione "strcmp" per confrontare due stringhe e quindi per assegnare il relativo punteggio, ma purtroppo mi dà errore dicendo che "strcmp was not declared in this scope", un po' come fa quando usi un cout o un cin e ti dimentichi di mettere "using namespace std"... il codice è questo...aiutatemi per favore! :muro:


#include <iostream>

using namespace std;

int main ()
{
int result;
int total = 20;
float percentage;

char qa [2]; //conterrà la risposta della domanda A
char qb [2]; //conterrà la risposta della B
char qc [2]; //conterrà la risposta della C
char qd [2]; //conterrà la risposta della D

char aa = 'a'; //serve per poi confrontare le stringhe nel caso rispondessi A
char ab = 'b'; //serve per poi confrontare le stringhe nel caso rispondessi B
char ac = 'c'; //serve per poi confrontare le stringhe nel caso rispondessi C
char ad = 'd'; //serve per poi confrontare le stringhe nel caso rispondessi D

cout << "Verifica del tuo stato di salute. Rispondi alle seguenti domande:" << endl << "Come ti senti?" << endl << "a) bene" << "b) così così" << "c) non benissimo" << "d) sono malato/a" << endl;

cin.getline (qa,2);

//se rispondi A:

if (strcmp (qa, aa)==0)
{
result = result + 5;
}

//se rispondi B e via dicendo...

else if (strcmp (qa, ab)==0)
{
result = result + 4;
}

else if (strcmp (qa, ac)==0)
{
result = result + 3;
}

else if (strcmp (qa, ad)==0)
{
result = result + 1;
}

cout << "Ora, dimmi. Solitamente dormi in modo:" << endl << "a) regolare" << endl << "b) irregolare" << endl;

cin.getline (qb,2);

if (strcmp (qa, aa)==0)
{
result = result + 5;
}

else if (strcmp (qa, ab)==0)
{
result = result + 2;
}

cout << "In genere mangi cibi grassi molto spesso?" << endl << "a) si" << endl << "b) no" << endl;

cin.getline (qc,2);

if (strcmp (qa, aa)==0)
{
result = result + 2;
}

else if (strcmp (qa, ab)==0)
{
result = result + 5;
}

cout << "Ora un'ultima domanda. Fai sport?" << endl << "a) si" << endl << "b) no" << endl;

cin.getline (qd,2);

if (strcmp (qa, aa)==0)
{
result = result + 5;
}

else if (strcmp (qa, ab)==0)
{
result = result + 2;
}

percentage = 100 / (total/result);

cout << "Il tuo stato di salute corrisponde al " << percentage << "%";

return 0;
}





Grazie mille,
fdm91hu

wingman87
14-10-2010, 18:52
strcmp sta in string.h mi pare.
Però, se vuoi fare le cose per bene, dovresti usare la classe string di c++ e i relativi metodi
http://www.cplusplus.com/reference/string/string/

asrm
14-10-2010, 18:57
Non puoi usare dei char con strcmp ma solo stringhe.
Quindi invece di



char aa = 'a'; //serve per poi confrontare le stringhe nel caso rispondessi A
char ab = 'b'; //serve per poi confrontare le stringhe nel caso rispondessi B
char ac = 'c'; //serve per poi confrontare le stringhe nel caso rispondessi C
char ad = 'd'; //serve per poi confrontare le stringhe nel caso rispondessi D



scrivi:



char aa[2] = "a";
char ab[2] = "b";
char ac[2] = "c";
char ad[2] = "d";

e dovrebbe funzionare.

tuccio`
14-10-2010, 19:01
oltre al fatto che per usare strcmp devi includere cstring, in realtà c'è un errore di fondo, non puoi confrontare un char con una stringa con strcmp, puoi confrontare due stringhe, ma non è la scelta migliore se devi leggere solo caratteri, la cosa migliore nel tuo caso è qualcosa del tipo:


char qa;
cin >> qa;
switch (qa) {
case 'a':
// fai qualcosa
break;
case 'b':
// fai qualcosa
break;
case 'd':
// fai qualcosa
break;
case 'd':
// fai qualcosa
break;
default:
// errore
}


l'unica cosa a cui fare attenzione qui è che in lettura non si leggano dei caratteri '\n' che è possibile facendo letture successive

fdm91hu
14-10-2010, 19:26
Non puoi usare dei char con strcmp ma solo stringhe.
Quindi invece di



char aa = 'a'; //serve per poi confrontare le stringhe nel caso rispondessi A
char ab = 'b'; //serve per poi confrontare le stringhe nel caso rispondessi B
char ac = 'c'; //serve per poi confrontare le stringhe nel caso rispondessi C
char ad = 'd'; //serve per poi confrontare le stringhe nel caso rispondessi D



scrivi:



char aa[2] = "a";
char ab[2] = "b";
char ac[2] = "c";
char ad[2] = "d";

e dovrebbe funzionare.

allora, innanzitutto grazie mille per le risposte. Adottando il metodo di cui sopra il programma funziona, l'unico problema è che mi da risultati sballati...che altro ho sbagliato? :mbe: