• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomoc odnośnie kodu c++

VPS Starter Arubacloud
0 głosów
292 wizyt
pytanie zadane 11 maja 2019 w C i C++ przez Marak123 Stary wyjadacz (11,190 p.)

Mam kod z którym jest jakiś problem!

Problem dotyczy linijki 18 i 20.

Pisze ze jest problem ze switch i odp1

Pomoże ktoś??

#include <iostream>
#include <cstdio>
#include <windows.h> 
#include <time.h>

using namespace std;

string pytanie;
string odp1="Jak sie nazywasz";


int main()
{
	
	cout <<"Witam!!"<<endl;
	cin>>pytanie;
	
	switch( pytanie )
	{
		case odp1:
			{
				cout<<"Nazywam sie Janek";
				break;
			}
		default:
			cout<<"Nie mam odpowiedzi na to pytanie";
	}
	
	
	
	
	
	
	return 0;
}

 

3 odpowiedzi

+2 głosów
odpowiedź 12 maja 2019 przez RafalS VIP (122,820 p.)

Jak to się powinno zrobić (jako czysta ciekawostka):

#include <iostream>
#include <string>
#include <unordered_map>

int main()
{
	std::unordered_map<std::string, std::string> odpowiedzi_do_pytan = {
		{"Jak sie nazywasz", "Nazywam sie Janek"}
	};
	std::cout << "Witam!!" << std::endl;

	std::string pytanie{};
	std::getline(std::cin, pytanie);
	if (auto it = odpowiedzi_do_pytan.find(pytanie); it != odpowiedzi_do_pytan.end()) {
		std::cout << it->second << std::endl;
	}
	else {
		std::cout << "Nie mam odpowiedzi na to pytanie" << std::endl;
	}
}

Czemu:

  • Hashowanie (unordered_map) jest szybsze niż ifologia.
  • Rozwiązanie jest czytelniejsze niż ifologia.
  • Rozwiązanie jest bardziej otwarte na modyfikacje niż ifologia. Dodanie kolejnego ifa wymaga zmiany kodu, mapa może być daną wejściową. 
  • Mapa uniemożliwia wprowadzenie skutków ubocznych. Każdy przypadek jest obsługiwany tak samo. W ciele ifa czy switcha mógłbyś dopisać dowolny inny kod, który dodatkowo może zmodyfikować zmienne w tym bloku. 
    Jeśli różne pytania wymagałyby czegoś więcej niż stringa jako odpowiedz można zrobić mapę string:lambda działania_do_pytan
+1 głos
odpowiedź 11 maja 2019 przez Snejki Stary wyjadacz (14,520 p.)
Nie można korzystać z ciągu znakoweg(string) jako warunku switcha
komentarz 12 maja 2019 przez niezalogowany

tu taki kod na potwierdzenie

#include <iostream>

using namespace std;

int sumastring (string a) {
    int suma=0;
    for (int i=0; i<a.size(); i++){
        suma+=(int)a[i];
        suma*=3;}
    return suma;
}

string ab="ab";
string ba="ba";

int main() {
    if (sumastring(ab)==sumastring(ba)) cout<< "tu masz racje DeBos123"<<endl;
    else cout<< "zalezy co i jak mnozysz"<<endl;
    return 0;

}

 

komentarz 12 maja 2019 przez DeBos123 Nałogowiec (44,950 p.)

Tutaj muszę ci przyznać rację, ale to sprawdza się tylko na tym przykładzie, ponieważ ad i ba dają taki sam wynik.

komentarz 12 maja 2019 przez niezalogowany
takie rozwiązanie ma dużo więcej wad jak np przekroczenie zakresu inta, tak jak wcześniej wspominałem, to taka luźna propozycja. A wiadomo że każdego switcha można zastąpić wielokrotną instrukcja else if (warunek) {...}else if (warunek) {...}, tylko to mniej czytelne czasami.
komentarz 12 maja 2019 przez RafalS VIP (122,820 p.)
@fisker Jeśli nie słyszałeś o haszowaniu to szanuje za wynalezienie go na nowo :D A od haszowania już bardzo blisko do konstrukcji typu unorderd_map<string,string> odpowiedzi_do_pytan, która jest o wiele lepsza niż switch czy ifologia.
komentarz 12 maja 2019 przez niezalogowany
edycja 12 maja 2019
a skąd miałem słyszeć jak jestem samoukiem fakt przerobiłem z 2, 3 kursy, ale nigdy nie miałem czasu pociągnąć dalej i wykorzystać tego czego się nauczyłem. Jak piszę programiki to takie, że miałem kiedyś jakiś problem i nie wiedziałem jak go rozwiązać, i jak rośniecie moja wiedza do programistyczna  to próbuję kodować. Ale tylko bawię się w programowanie gdy z jakiś powodów nie mogę pracować. Ale fakt zawsze miałem do tego ciągoty. Ale przy łopacie ciężko podnosić swoje umiejętności programistyczne.

A reszta wiedzy to gdzie internet zaprowadzi jak rozwiązuję jakiś problem, ale mapowanu słyszałem i fakt nie przyszło mi to go głowy wczoraj, ale w zupełnie innym kontekście
+1 głos
odpowiedź 11 maja 2019 przez DeBos123 Nałogowiec (44,950 p.)
edycja 11 maja 2019 przez DeBos123

Powinieneś użyć if'a:

#include <iostream>
#include <cstdio>
#include <time.h>

using namespace std;

string pytanie;
string odp1="Jak sie nazywasz";

int main()
{
    cout <<"Witam!!"<<endl;
    getline(cin, pytanie);
    if (pytanie==odp1){
        cout<<"Nazywam sie Janek";
    }else{
        cout<<"Nie mam odpowiedzi na to pytanie";
    }
    return 0;
}

 

komentarz 11 maja 2019 przez Marak123 Stary wyjadacz (11,190 p.)
Przetestuj sobie ten program !!!
komentarz 11 maja 2019 przez DeBos123 Nałogowiec (44,950 p.)
No sobie przetestowałem, i?
komentarz 12 maja 2019 przez Marak123 Stary wyjadacz (11,190 p.)
Nie działa
komentarz 12 maja 2019 przez DeBos123 Nałogowiec (44,950 p.)
U mnie działa.

Podobne pytania

0 głosów
1 odpowiedź 86 wizyt
pytanie zadane 25 lipca 2019 w C i C++ przez Yorweth Obywatel (1,310 p.)
0 głosów
1 odpowiedź 176 wizyt
pytanie zadane 12 września 2021 w Java przez Kalindoreks Użytkownik (620 p.)
0 głosów
1 odpowiedź 121 wizyt
pytanie zadane 5 sierpnia 2020 w Python przez Marak123 Stary wyjadacz (11,190 p.)

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...