|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Napoli
Messaggi: 2380
|
[C++][Eclipse Helios] La funzione strcmp non funziona. Cosa diamine ho sbagliato?
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! Codice:
#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
__________________
Mobo: ASUS z87 Pro|| Procio: Intel Core i7 4770k @4.3GHz (100x43) || RAM: 2 x 8GB Corsair Dominator Platinum @1866MHz || Graphic: Asus nVidia GTX780 || SSD: Samsung 840Pro 256GB || SSD 2: Samsung 860 QVO 1TB || Ali: Corsair AX860 Pro Series @860W 80+ Platinum || Dissi: ThermalTake NIC C4 || SO: Windows 10 x64|| Monitor: BenQ VZ2770 + Samsung SA300
Ultima modifica di fdm91hu : 14-10-2010 alle 19:40. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
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/ |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jul 2004
Messaggi: 182
|
Non puoi usare dei char con strcmp ma solo stringhe.
Quindi invece di Codice:
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 Codice:
char aa[2] = "a"; char ab[2] = "b"; char ac[2] = "c"; char ad[2] = "d"; |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
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:
Codice:
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
}
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2006
Città: Napoli
Messaggi: 2380
|
Quote:
__________________
Mobo: ASUS z87 Pro|| Procio: Intel Core i7 4770k @4.3GHz (100x43) || RAM: 2 x 8GB Corsair Dominator Platinum @1866MHz || Graphic: Asus nVidia GTX780 || SSD: Samsung 840Pro 256GB || SSD 2: Samsung 860 QVO 1TB || Ali: Corsair AX860 Pro Series @860W 80+ Platinum || Dissi: ThermalTake NIC C4 || SO: Windows 10 x64|| Monitor: BenQ VZ2770 + Samsung SA300
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:37.




















