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

program maturalny

0 głosów
614 wizyt
pytanie zadane 17 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

Ostatni program przed dzisiejszą maturą...

Chcę sprawdzić, czy występują w pliku "liczby.txt" liczby składające się z samych jedynek oraz z samych zer i ewentualnie je wypisać jeśli takowe się znajdują. Zastosowałem tu bool do sprawdzania true/false. Mój program wygląda tak, jednak nie działa, nie wypisuje żadnej liczby. Poproszę kogoś o zerknięcie, kod jest krótki i przejrzysty, może ktoś zauważy błąd.

#include <iostream>
#include <fstream>

using namespace std;
int main()
{
    fstream plik;
    plik.open("liczby.txt", ios::in);

    string dane;
    bool jedynki;
    bool zera;

    while(plik.eof())
    {
        plik >> dane;
        jedynki = true;
        zera = true;
        for(int i = 0; i<dane.size(); i++)
        {
            if(dane[i] == '0') jedynki = false;
            if(dane[i] == '1') zera = false;
        }
        if(jedynki) cout << dane << endl;
        if(zera) cout << dane << endl;
    }
    plik.close();
    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 17 maja 2016 przez Lafoniz Gaduła (4,370 p.)
....
bool wypisz = true;
for(int i = 0; i < dane.size(); ++i)
{
   if(!(dane[i] == '0' || dane[i] == '1'))
      wypisz = false;
}

if(wypisz) cout << dane << endl;
....

Porównaj ten szkic z Twoim kodem. 

Zauważ u siebie, że Twój kod wypisuje liczbę w sytuacji gdy NIE MA ona jedynek lub zer. Jeżeli nie ma zer i jedynek to wypisuje ją dwa razy!

komentarz 17 maja 2016 przez Evelek Nałogowiec (28,960 p.)
Sympatyczny ten Twój sposób. :) Dziękuje za pomoc. Te funkcje logiczne to masakra dla mnie...
komentarz 17 maja 2016 przez Evelek Nałogowiec (28,960 p.)

Mam coś takiego:

#include <iostream>
#include <fstream>

using namespace std;
int main()
{
    fstream plik;
    plik.open("cyfry.txt", ios::in);
    string dane;

    while(plik.eof())
    {
        bool wypisz = true;
        plik >> dane;
        for(int i = 0; i < dane.size(); ++i)
        {
            if(!(dane[i] == '0' || dane[i] == '1'))
                wypisz = false;
        }

        if(wypisz) cout << dane << endl;
    }
    plik.close();
    return 0;
}

Co wraz nie wypisuje odpowiednich wartości...

komentarz 17 maja 2016 przez Lafoniz Gaduła (4,370 p.)
Jesteś pewny, że otworzyłeś plik z dobrą nazwą i dobrymi danymi? Przy okazji warto dodać sprawdzenie czy plik został prawidłowo otwarty.
komentarz 17 maja 2016 przez Evelek Nałogowiec (28,960 p.)
Tak. U mnie nie działa. Plik tekstowy i program znajdują się w tym samym folderze.
komentarz 17 maja 2016 przez Lafoniz Gaduła (4,370 p.)
Twoja pętla while jest błędna, brakuje tam negacji.
komentarz 17 maja 2016 przez Evelek Nałogowiec (28,960 p.)
A bez kitu.... dobra działa teraz. Dzięki za czas.
0 głosów
odpowiedź 17 maja 2016 przez dźidźi Początkujący (400 p.)
fajnie że są ludzie którzy jeszcze potrafią spojrzeć na wszystko świeżym spojrzeniem

Podobne pytania

0 głosów
2 odpowiedzi 425 wizyt
pytanie zadane 18 lutego 2018 w C i C++ przez Paweł Piech Użytkownik (720 p.)
+2 głosów
0 odpowiedzi 339 wizyt
pytanie zadane 11 lutego 2022 w C i C++ przez RufinB Bywalec (2,020 p.)

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,323 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...