Problema con if e stringhe

di il
11 risposte

Problema con if e stringhe

Ragazzi! Non riesco a capire dov'è l'errore! Sono alle prime armi sì, ma aiutatemi perché non riesco a far funzionare bene la IF.
In poche parole, una volta lanciato il programma e inserito il nome, mi stampa a video il nome (come da me richiesto) e poi però salta l'istruzione IF.
Sono consapevole che è impossibile che salti l'istruzione IF, credo che abbia sbagliato qualcosa con le variabili, ma non riesco a capire cosa.
#include "stdafx.h"
#include <iostream>


int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}

using namespace std;

int main()

{
	cout << "Benvenuto utente! Qual e' il tuo nome? ";
	char nome[6] = { ' ', ' ', ' ', ' ', ' ', '\0' };
	char nomevero[6] = { 'D', 'a', 'r', 'i', 'o', '\0' };
	char nomevero2[6] = { 'd', 'a', 'r', 'i', 'o', '\0' };

	cin >> nome;
	cout << nome;
	
	if (nome == nomevero || nome == nomevero2 ){ cout << "Sembra proprio che tu sia sincero, Dario!"; }
else { cout << "Bugiardo! Metti il tuo nome vero!!!"; }
	getchar();
	getchar();

	
}
Cio' che mi accade è che quando questo programma va in esecuzione è come se non riconoscesse né "Dario" né "dario" alla condizione IF e continua l'esecuzione tranquillamente.

Lo scopo di questo programma dovrebbe essere :
1- Riconoscere solo il nome Dario
2- Se ne viene inserito uno differente, l'utente deve essere rimandato all'inserimento.

Ho provato anche con questo ciclo.... Funziona tranne per quando inserisco realmente il nome "Dario" ....

Credo a questo punto che sia un problema di variabili.
 int main()

{
	char nome[6] = { ' ', ' ', ' ', ' ', ' ', '\0' };
	char nomevero[6] = { 'D', 'a', 'r', 'i', 'o', '\0' };
	char nomevero2[6] = { 'd', 'a', 'r', 'i', 'o', '\0' };
	
	cout << "Benvenuto utente, qual è il tuo nome?";
	cin >> nome;
	while (nome != nomevero || nome != nomevero2){
		cout << "Bugiardo!!! Inserisci il tuo vero nome";
		cin >> nome;
	}
	
	

	cout << "Vedo che sei sincero!";
	
	getchar();
	getchar();

	
}

11 Risposte

  • Re: Problema con if e stringhe

    Se vuoi programmare, prima di usare del codice devi studiare cosa stai scrivendo altrimenti rimarrai sempre alle prime armi.

    In C due stringhe non si confrontano con == o con != ma con una funzione apposita, ad esempio la strcmp

    Inoltre se inizializzi una stringa, scriverai

    char nome[] = "Dario";

    Quindi, studia bene le stringhe del C e la funzione strcmp
  • Re: Problema con if e stringhe

    Siccome a me piace anche capire bene l'errore che ho fatto... In questo modo cosa ho chiesto al computer?
  • Re: Problema con if e stringhe

    La risposta sarebbe: hai confrontato gli indirizzi di memoria dei due vettori di caratteri.

    Il problema e' capirla!

    Ristudia tutto quello che riguarda i vettori, i caratteri ed i vettori di caratteri (detti anche stringhe)
  • Re: Problema con if e stringhe

    Ma strcmp non confronta il numero dei caratteri degli array che contengono le stringhe?
    A me serve un'istruzione che confronti i caratteri veri e propri.
  • Re: Problema con if e stringhe

    Compares the C string str1 to the C string str2.

    This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.

    This function performs a binary comparison of the characters. For a function that takes into account locale-specific rules, see strcoll.


  • Re: Problema con if e stringhe

    roger96 ha scritto:


    Ma strcmp non confronta il numero dei caratteri degli array che contengono le stringhe?
    Ma dove l'hai letta questa cosa?
    A me serve un'istruzione che confronti i caratteri veri e propri.
    A te serve studiare quello che ti si dice ...
  • Re: Problema con if e stringhe

    roger96 ha scritto:


    Ma strcmp non confronta il numero dei caratteri degli array che contengono le stringhe?
    Ma dove l'hai letta questa cosa?
    A me serve un'istruzione che confronti i caratteri veri e propri.
    A te serve studiare quello che ti si dice ...
  • Re: Problema con if e stringhe

    Se ti secca rispondermi lascia stare... Lo so che devo studiare, ma non credo che tu quando hai iniziato sapevi interpetare tutto per filo e per segno...

    Comunque non capisco cosa sbaglio... Guardate ora:
    int main()
    {
    	cout << "Benvenuto utente. Qual e' il tuo nome? (max 9 caratteri)" ;
    	char nome[10];
    	char nomevero[] = "dario";
    	char nomevero1[] = "Dario";
    	cin >> nome;
    	cout << nome << nomevero << nomevero1;
    	if (strcmp(nome, nomevero)!= 0 || strcmp (nome, nomevero1)!= 0){ cout << "Bugiardo!!! Questo non è il tuo vero nome!"; }
    	else { cout << "Vedo che con me sei sincero, Dario!"; }
    	getchar(); getchar();
    
    }
  • Re: Problema con if e stringhe

    Ho risolto ragazzi!! Avevo sbagliato la sintassi... Grazie dell'aiuto!
  • Re: Problema con if e stringhe

    roger96 ha scritto:


    Se ti secca rispondermi lascia stare... Lo so che devo studiare, ma non credo che tu quando hai iniziato sapevi interpetare tutto per filo e per segno...
    Sai, una volta, al tempo delle caverne, si procedeva cosi:

    1) si apriva il libro e si studiava il capitolo
    2) si faceva il programmino di prova
    3) se non funzionava, si andava al passo 1)
    4) se non si capiva, si andava al passo 1)
    5) se c'erano dei dubbi, si andava al passo 1)
    6) se si aveva interpretato male, si andava al passo 1)
    ..
    N) si passava al prossimo capitolo! E si andava al passo 1)
  • Re: Problema con if e stringhe

    roger96 ha scritto:


    Se ti secca rispondermi lascia stare...
    Veramente è proprio l'opposto! Proprio perché ti ho risposto e come tanti ho impiegato il mio tempo per darti una mano.
    Lo so che devo studiare, ma non credo che tu quando hai iniziato sapevi interpetare tutto per filo e per segno...
    No, infatti, non sapevo. E se mi dicevano usa 'x', come dice migliorabile, aprivo il libro e l'andavo a studiare, dopo aver ringraziato chi aveva impiegato il tempo per farlo.
Devi accedere o registrarti per scrivere nel forum
11 risposte