Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zadanie 15 - pętla do-while, problem z wyświetleniem linijki kodu

Ostatnio zmodyfikowano 2015-01-07 17:34
Autor Wiadomość
piotrlajewski
Temat założony przez niniejszego użytkownika
Zadanie 15 - pętla do-while, problem z wyświetleniem linijki kodu
» 2015-01-06 20:43:59
Witam!
Tak jak w temacie (Zadanie z kalkulatorem), a dokładniej: po kilkukrotnym wpisanie niewłaściwego znaku po kilku pętlach wpisuję prawidłowy, ale nie wyświetla "std::cout<<"Podana pierwsza liczba to: "<<a;", jeżeli od razu wpisać prawidłową - to wyświetla. Dziękuję za pomoc!

C/C++
#include <iostream>
int main()
{
    int a;
   
    std::cout << "Podaj pierwsza liczbe: ";
    std::cin >> a;
    if( std::cin.fail() )
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Podaj prawidlowa pierwsza liczbe: ";
        std::cin >> a;
    } while( std::cin.fail() );
    else
         std::cout << "Podana pierwsza liczba to: " << a;
   
    return 0;
}
P-124350
alixir
» 2015-01-06 21:02:39
Wywal całkowicie warunek if/else i zamień pętlę do/while na while
P-124352
piotrlajewski
Temat założony przez niniejszego użytkownika
» 2015-01-06 21:44:47
Poproszę o nakierowanie trochę dalej...:

C/C++
#include <iostream>
int main()
{
    int a;
   
    std::cout << "Podaj pierwsza liczbe: ";
    std::cin >> a;
    while( std::cin.fail() );
    ////
P-124355
wilkoo13
» 2015-01-06 22:43:18
Zrób pętlę do while. Do środka pętli wstawiasz WSZYSTKO a w warunku cin.fail(). Tylko że clear i sync wstawiasz przed warunkiem czyli przed wprowadzeniem danych.
P-124359
Memento96
» 2015-01-07 08:32:59
C/C++
#include <iostream>
int main()
{
    int a;
   
    std::cout << "Podaj pierwsza liczbe: ";
    std::cin >> a;
    while( std::cin.fail() )
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Podaj prawidlowa pierwsza liczbe: ";
        std::cin >> a;
    }
   
    std::cout << "Podana pierwsza liczba to: " << a;
   
    return 0;
}
Po co tutaj był if? To było  zbędne

Powtórz pętle while, nie umiesz jej użyć ;)

cytat z tej strony :
while( /* warunek kończący pętlę */ )
{
    //powtarzany blok instrukcji
}
P-124376
piotrlajewski
Temat założony przez niniejszego użytkownika
» 2015-01-07 13:13:31
Dzięki za pomoc, wczoraj - zgodnie z poradą wilkoo13 (bardzo dziękuję)  - zmieniłem na do/while:
C/C++
#include <iostream>
int main()
{
    int a;
   
    std::cout << "Podaj pierwsza liczbe: ";
    std::cin >> a;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Podaj prawidlowa pierwsza liczbe: ";
        std::cin >> a;
    } while( std::cin.fail() );
   
    std::cout << "Podana pierwsza liczba to: " << a;
   
    return 0;
}
Memento96, na stronie nie znalazłem osobnego while bez do, ale wielkie dzięki.
Do tego też mam pytanie: na stronie jest przykład:
C/C++
#include <iostream>
int main()
{
    int ile;
   
    std::cout << "Ile razy wypisac napis? ";
    std::cin >> ile;
    if( ile > 0 )
    do
    {
        std::cout << "Napis" << std::endl;
        ile--;
    } while( ile > 0 );
   
    return 0;
}
Rozumiem, że zapis "while( ile > 0 )" działa tak samo jak "while( ile )", skoro w nawiasie sprawdzana jest wartość różna od "0".
P-124385
darko202
» 2015-01-07 13:43:49
>>"while( ile > 0 )" działa tak samo jak "while( ile )", skoro w nawiasie sprawdzana jest wartość różna od "0".

pętla while(warunek logiczny ) warunek logiczny true/false
dlatego 1 zapis jest poprawny
a 2 "while( ile )"  działa bo dokonywana jest niejawna konwersja do bool  0 -> false, inne -> true 
ale 2 to już inny warunek while (ile<>0)

dlatego polecam 1 ze względu na czytelność kodu,
oraz błędów, które się pojawią gdy zawiedzie Cię ta niejawna konwersja i nie zobaczysz zmiany faktycznych warunków pętli
P-124387
Memento96
» 2015-01-07 17:34:13
Dzisiaj w szkole rozmawialiśmy o tym przykładzie, pętla do while wykona się zawsze raz, czyli zawsze poprosi o ponowne podanie liczby, lepiej to samym while zrobić ;)
P-124400
« 1 »
  Strona 1 z 1