Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] Bool zwraca zawsze zero


Gość piotr9821

Rekomendowane odpowiedzi

Opublikowano

W poniższym kodzie funkcja bool zwraca zawsze zero , kto pomorze poprawic kod

 

#include<iostream>
int main ()
{
	float a;
	float b;
	float c;
	bool wczytano;
	std::cout << " Podaj 3 liczby rzeczywiste ";
	std::cin >> a;
	std::cout << "Wczytano " << wczytano << std::endl;
	std::cin.clear();
	std::cin.sync();
	std::cin >> b;
	std::cout << "Wczytano " << wczytano << std::endl;
	std::cin.clear();
    std::cin.sync();
	std::cin >> c;
	std::cout << "Wczytano " << wczytano << std::endl;
	std::cin.clear();
	std::cin.sync();
	std::cout << "Liczba a = " << a << std::endl;
	std::cin.clear();
	std::cin.sync();
	std::cout << "Liczba b = " << b << std::endl;
    std::cin.clear();
	std::cin.sync();
	std::cout << "Liczba c = " << c << std::endl;
	std::cin.clear();
	std::cin.sync();
return 0;
}

 

Opublikowano

Dzięki , dopiero się ucze , teraz jeśli wpisze złe dane to też zwraca prawde

Opublikowano

Moje pytanie brzmi po co ta zmienna bool ? Chcesz sprawdzic czy to jest liczba rzeczywista to musisz dodać instrukcje warunkową (poczytaj o "if , else, elseif")

reflink

Opublikowano

Z tąd http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12

na końcu

Wskazówka

Informacje o poprawnym (albo niepoprawnym) wczytaniu danych należy przechować w dodatkowych zmiennych typu bool.

#include<iostream>
int main ()
{
	float a;
	float b;
	float c;
	bool wczytano;
	wczytano = std::cin.fail();
	wczytano = std::cin.good();
	std::cout << " Podaj 3 liczby rzeczywiste ";
	std::cin >> a;
	std::cout << "Wczytano " << wczytano << std::endl;
	std::cin.clear();
	std::cin.sync();
	std::cin >> b;
	std::cout << "Wczytano " << wczytano << std::endl;;
	std::cin.clear();
    std::cin.sync();
	std::cin >> c;
	std::cout << "Wczytano " << wczytano << std::endl;
	std::cin.clear();
	std::cin.sync();
	std::cout << "Liczba a = " << a << std::endl;
	std::cin.clear();
	std::cin.sync();
	std::cout << "Liczba b = " << b << std::endl;
    std::cin.clear();
	std::cin.sync();
	std::cout << "Liczba c = " << c << std::endl;
	std::cin.clear();
	std::cin.sync();
return 0;
}

kod zwraca zawsze prawde

Opublikowano

Musisz sprawdzać stan strumienia po każdym wczytaniu ale przed czyszczeniem.:

#include<iostream>

int main ()

{

float a;

float b;

float c;

bool wczytano;

std::cout << " Podaj 3 liczby rzeczywiste ";

std::cin >> a;

wczytano = std::cin.good();

std::cout << "Wczytano " << wczytano << std::endl;

std::cin.clear();

std::cin.sync();

std::cin >> b;

wczytano = std::cin.good();

std::cout << "Wczytano " << wczytano << std::endl;;

std::cin.clear();

std::cin.sync();

std::cin >> c;

wczytano = std::cin.good();

std::cout << "Wczytano " << wczytano << std::endl;

std::cout << "Liczba a = " << a << std::endl;

std::cout << "Liczba b = " << b << std::endl;

std::cout << "Liczba c = " << c << std::endl;

return 0;

}

+ niepotrzebnie czyścisz strumień wejścia po wypisywaniu tekstu (3 ostatnie cout). Nie ma to sensu. Po co czyścić wejście używając wyjścia.
Opublikowano


#include <iostream>

 

int main(int argc, char *argv[])

{

float a;

float b;

float c;

int pom=0;

 

do

{

std::cout << "\nPodaj "<<1+pom<<" liczbe rzeczywista ";

 

if(pom==0)std::cin >> a;

if(pom==1)std::cin >> b;

if(pom==2)std::cin >> c;

 

if(std::cin.good()!=true)

{

std::cout << "Wprowadzona wartos to nie liczba rzeczywista\n";

pom--;

}

 

std::cin.clear();

std::cin.sync();

pom++;

 

}while(pom!=3);

 

std::cout << "\n\nWprowadziles nastepujace liczby rzeczywiste: \n\n 1 = " << a ;

std::cout << "\n 2 = " << b ;

std::cout << "\n 3 = " << c ;

 

return 0;

}

Opublikowano

Mordijc działa , wielki dzieki , ile się uczyłeś programować .

Da się zrobić aby

std::cin.clear();

std::cin.sync();

wpisać tylko raz

( Program nie robi tego co chce programista tylko co programista zaprogramował )

Opublikowano

 

#include<iostream>
void wczytaj(float &liczba,int &wczytywana){
    std::cin.clear();
    std::cin.sync();
    std::cin >> liczba;
        wczytywana +=1;
    std::cout << "Wczytano " << wczytywana << std::endl;
}


int main ()
{
    float a;
    float b;
    float c;
    int wczytano = 0;
    std::cout << " Podaj 3 liczby rzeczywiste ";
wczytaj(a,wczytano);
wczytaj(b,wczytano);
wczytaj(c,wczytano);
    std::cout << "Liczba a = " << a << std::endl;
    std::cout << "Liczba b = " << b << std::endl;
    std::cout << "Liczba c = " << c << std::endl;
return 0;
}

 

 

Opublikowano

Da się zrobić aby

std::cin.clear();

std::cin.sync();

wpisać tylko raz

Wszystko sie da :)


#include <iostream>

int main(int argc, char *argv[]) 
{
	float a;	int pa=0;
	float b;	int pb=0;
	float c;	int pc=0;
	
int pom=0;
	do
	{	
		
		std::cout << "Podaj "<<1+pom<<" liczbe rzeczywista ";	

		if(pom==0)
			{
				std::cin >> a;	pa=std::cin.good();
			}
		if(pom==1)
			{
				std::cin >> b;	pb=std::cin.good();
			}	
		if(pom==2)
			{
				std::cin >> c;	pc=std::cin.good();
			}

			std::cin.clear();
			std::cin.sync();
	
		pom++;
	
	}while(pom!=3);

std::cout << "\n\nWprowadziles nastepujace liczby rzeczywiste: \n";	
	
	if(pa)	std::cout <<"\n Liczba 1 = "<< a <<"	    (Wczytanie liczby sie powiodlo)";
	else	std::cout <<"\n Liczba 1 = ?    (Wczytanie liczby sie niepowiodlo)";
	
	if(pb)	std::cout <<"\n Liczba 2 = "<< b <<"	    (Wczytanie liczby sie powiodlo)";
	else	std::cout <<"\n Liczba 2 = ?    (Wczytanie liczby sie niepowiodlo)";

	if(pc)	std::cout <<"\n Liczba 3 = "<< c <<"	    (Wczytanie liczby sie powiodlo)";
	else	std::cout <<"\n Liczba 3 = ?    (Wczytanie liczby sie niepowiodlo)";

return 0;
}

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...