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

Sprawdzanie liczby c++ problem z if else

VPS Starter Arubacloud
–1 głos
1,686 wizyt
pytanie zadane 24 października 2018 w C i C++ przez Paweł123 Nałogowiec (33,500 p.)

Witam, mam problem. Kiedy podaję wartość x mniejszą od 10 wyskakuje komunikat 

Podana liczba NIE JEST WIEKSZA od 10

Podaj liczbe X wieksza od 10: 

I kiedy znowu podam wartość mniejszą od 10, program się kończy, chociaż powinien prosić cały czas o podanie liczby większej od 10, ktoś wie dlaczego tak się dzieje? 

#include <iostream>

using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
    
    int x=0, y=0, suma=0;
    
        
     cout << "Podaj liczbe X wieksza od 10: ";
     cin>>x;
     
     
         if(x>10){
     
     
         if(y<x && y<=100){
         
                 cout << "Podaj liczbe Y wieksza od X zarazem mniejsza od 100: ";
                 cin>>y;
         }else{
             
                 cout << "Podaj liczbe Y MUSI BYC wieksza od X zarazem mniejsza od 100: ";
                 cin>>y;
         }
         
     
     }else{
                  
          cout << "Podana liczba NIE JEST WIEKSZA od 10"<<endl;
         cout << "Podaj liczbe X wieksza od 10: ";
         cin>>x;
     }    

    
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 24 października 2018 przez chucksqll Stary wyjadacz (12,930 p.)
wybrane 24 października 2018 przez Paweł123
 
Najlepsza

Wydaje mi się, że średnio rozumiesz to co napisałeś.

Program nie powinien prosić do momentu podania, bo nie masz tam żadnej pętli lub czegoś na podobę(a jedynie pojedyncze instrukcje warunkowe) , która by trwała aż do podania poprawnej odpowiedzi. Spróbuj napisać coś na podobe:

while(liczba nie jest taka jak powinna)
{
...
podaj poprawna liczbe
...
}

To tak w dużym uproszczeniu

komentarz 24 października 2018 przez Paweł123 Nałogowiec (33,500 p.)

No właśnie przymierzałem się do pętli while, ale jakoś myślałem na zastosowaniem do while, dzięki :D 

komentarz 24 października 2018 przez Paweł123 Nałogowiec (33,500 p.)

@chucksqll,

Teraz napotkałem taki błąd

#include <iostream>

using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	
	int x=0, y=0, suma=0;
	
		
	 cout << "Podaj liczbe X wieksza od 10: ";
	 cin>>x;
	 
	 
	while(x<=10 && y>100){
	 
		 cout << "Podana liczba "<<x<<" NIE JEST WIEKSZA od 10"<<endl;
		 cout << "Podaj liczbe X wieksza od 10: ";
		 cin>>x; 
	 
	 }
	 

	

	return 0;
}

Kiedy while(x<=10) piszę tak wszystko działa, jednak kiedy dodam while(y<x && y>100) juz nie działa, wiesz czym może być to spowodowane?

 

 

komentarz 24 października 2018 przez chucksqll Stary wyjadacz (12,930 p.)
Pokaż cały kod, bo nie jestem pewien o co Ci chodzi.
komentarz 25 października 2018 przez Paweł123 Nałogowiec (33,500 p.)

Ogólnie to mam takie zadanie.

Napisz program, który przy użyciu pętli sumuje liczby parzyste z przedziału od x
do y, gdzie wartości x i y są podane przez użytkownika oraz 10 <= x < y <= 100.

#include <iostream>

using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	
	int x=0, y=0, suma=0;
	
		
	 cout << "Podaj liczbe X wieksza od 10: ";
	 cin>>x;
	 
	 
	while(x<=10 && y>100){
	 
		 cout << "Podana liczba "<<x<<" NIE JEST WIEKSZA od 10"<<endl;
		 cout << "Podaj liczbe X wieksza od 10: ";
		 cin>>x; 
	 
	 }
	 
	 cout << "Podaj liczbe Y wieksza od "<<x<<" zarazem mniejsza od 100: ";
	 cin>>y;	
	 
	 while(y<x && y>100){

	 	cout << "Podana liczba "<<y<<" NIE JEST WIEKSZA od "<<x<<" a zarazem mniejsza od 100"<<endl;
		cout << "Podaj liczbe Y wieksza od:"<<x<<" a zarazem mniejsza od 100: ";
		cin>>y; 

	 }
	
	suma=x+y;
	
	cout<<suma;	 	
	

	return 0;
}

     while(x<=10 && y>100)  while(y<x && y>100) niszczą mi cały kod. Możesz mnie naprowadzić co robię źle?

komentarz 25 października 2018 przez chucksqll Stary wyjadacz (12,930 p.)

Po pierwsze Twoje warunki mówią co innego.

while(x<=10 && y>100) to jest prawdziwe, gdy x jest mniejsze równe 10, a y większe od 100.

while(y<x && y>100) to jest prawdziwe gdy x jest większe od y i y jest większe od 100.

Co do samego programu napisałbym to bardziej w taki sposób.

while(podane wartosci nie spelniaja zalozen)
{
     std::cin>>x;
     if(x>10)// jezeli x nie spelnia warunkow pomin dalszy przebieg petli i zapytaj jeszcze raz
     {
          continue;
     }
     std::cin>>y;
     if(x>y || y>100)// jesli warunki sa niespelnione analogicznie do powyzej
     {
          continue;
     }
     //jesli petla dojdzie do tego momentu to znaczy, ze podane wartosci sa dobre
     break;
}

Po tym masz już dobre wartości x i y teraz wystarczy obliczyć jeszcze wszystkie liczby parzyste przedziale [x, y]

komentarz 25 października 2018 przez Paweł123 Nałogowiec (33,500 p.)

Napisałem coś takiego

#include <iostream>
#include <conio.h>

using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	
	int x=0, y=0, suma=0;
	
		
	 cout << "Podaj liczbe X wieksza od 10: ";
	 cin>>x;
	 
	 while(x<10){
	 	
	 	cout << "Podana liczba "<<x<<" NIE JEST WIEKSZA od 10"<<endl;
		cout << "Podaj liczbe X wieksza od 10: ";
		cin>>x; 
	 	if(x>10)
		 {
			continue;
		 }
		
		cout << "Podana liczba "<<y<<" NIE JEST WIEKSZA od "<<x<<" a zarazem mniejsza od 100"<<endl;
		cout << "Podaj liczbe Y wieksza od:"<<x<<" a zarazem mniejsza od 100: ";
		cin>>y; 
	 	if(x>y || y>100)// jesli warunki sa niespelnione analogicznie do powyzej
    	 {
          continue;
    	 }
	 	break;
	 }
	 
	 
	 
	/* 
	while(x<=10 && y>100){
	 
		 cout << "Podana liczba "<<x<<" NIE JEST WIEKSZA od 10"<<endl;
		 cout << "Podaj liczbe X wieksza od 10: ";
		 cin>>x; 
	 
	 }
	 
	 cout << "Podaj liczbe Y wieksza od "<<x<<" zarazem mniejsza od 100: ";
	 cin>>y;	
	 
	 while(y<x && y>100){

	 	cout << "Podana liczba "<<y<<" NIE JEST WIEKSZA od "<<x<<" a zarazem mniejsza od 100"<<endl;
		cout << "Podaj liczbe Y wieksza od:"<<x<<" a zarazem mniejsza od 100: ";
		cin>>y; 

	 }
	
	suma=x+y;
	
	cout<<suma;	 	
	*/
	getch();
	return 0;
}

Możesz powiedzieć, czy idę chociaż w dobra stronę?

Kiedy próbuję za 3 razem podać złą liczbę, nagle pojawia się 0, chociaż jej nie wprowadzałem.

komentarz 25 października 2018 przez chucksqll Stary wyjadacz (12,930 p.)

Już lepiej, ale nadal daleko...

Twoim rozumowaniem kod powinien wyglądać tak jak poniższy:

#include <iostream>
#include <conio.h>
 
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
int main(int argc, char** argv) {
     
    int x=0, y=0, suma=0;
    
     cout << "Podaj liczbe X wieksza od 10: ";
     cin>>x;
      
     while(x<10)
     {
        cout << "Podana liczba "<<x<<" NIE JEST WIEKSZA od 10"<<endl;
        cout << "Podaj liczbe X wieksza od 10: ";
        cin>>x; 
     }
    cout<<"Podaj liczbe Y wieksza od "<<x<<" i mniejsza od 100"<<endl;
    cin>>y;
    while(y<x||y>100)
    {
    	cout << "Podana liczba "<<y<<" NIE JEST WIEKSZA od "<<x<<" a zarazem mniejsza od 100"<<endl;
        cout << "Podaj liczbe Y wieksza od:"<<x<<" a zarazem mniejsza od 100: ";
        cin>>y; 
    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 244 wizyt
pytanie zadane 26 lutego 2019 w C i C++ przez de1vee Nowicjusz (220 p.)
0 głosów
1 odpowiedź 240 wizyt
pytanie zadane 7 lipca 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)
+1 głos
3 odpowiedzi 882 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 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!

...