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

Odczyt z pliku - sprawdzanie parzystości

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,099 wizyt
pytanie zadane 11 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

Mam plik tekstowy w którym znajdują się liczby zakończone zerem lub jedynką, czyli np. 10010001, 100110010 itd.

Napisałem program, który pobiera dane z pliku tekstowego, a następnie sprawdza czy liczba jest parzysta. Rozwiązałem to w ten sposób, że stworzyłem zmienną char, a za pomocą .length()-1 pobieram ostatnią cyfrę z danej liczby. Mój kod programu wygląda tak:

#include <iostream>
#include <fstream>

using namespace std;

int main()

{
    fstream plik;
    plik.open("liczby.txt", ios::in);

    string dane;
    char znak;
    int licz = 0;

    while (!plik.eof())
    {
        getline(plik, dane);
        znak = dane[dane.length()-1];
        if (znak == '0')
        {
            licz++;
        }
    }
    cout << licz << endl;
    
    return 0;
}

W tym momencie pokazuje mi poprawną ilość liczb. Ale ja dopisałem do pliku tekstowego dodatkowo liczby: 292, 294, 306, 408. Więc teraz, aby podliczyć wszystkie parzyste, zmieniłem warunek, i wiersz 20 kodu wygląda następująco:

if (znak == '0' || '2' || '4' || '6' || '8')

I w tym momencie kompilator pokazuje mi, że liczb parzystych jest 1004. A ja dopisałem tylko 4 parzyste, więc powinno ich być 504.

Poprosiłbym o pomoc, być może ten warunek z if z 20 wiersza źle napisałem.

2 odpowiedzi

+1 głos
odpowiedź 11 maja 2016 przez mrcnsct Nałogowiec (36,390 p.)
wybrane 11 maja 2016 przez Evelek
 
Najlepsza
if (znak == '0' || znak== '2' || znak== '4' || znak== '6' || znak== '8')

 

komentarz 11 maja 2016 przez Evelek Nałogowiec (28,960 p.)
Działa poprawnie, dziękuje.
komentarz 11 maja 2016 przez mrcnsct Nałogowiec (36,390 p.)
A wiesz czego tak jest? Każda liczba różna od 0 ma wartość logiczną 1. Znaki są jak liczby (ASCII). Jak masz: if(znak=='0' || '2') to to zawsze się wykona, bo '2' ma wartość logiczną 1. Dlatego trzeba if(znak=='0' || znak=='2').
komentarz 11 maja 2016 przez Evelek Nałogowiec (28,960 p.)
No i dlatego mi się wszystkie liczby dodały jakie były w pliku tekstowym...
0 głosów
odpowiedź 12 maja 2016 przez Evelek Nałogowiec (28,960 p.)

Jeszcze jedno pytanie co do tego przykładu. A jeśli chciałbym sprawdzić pierwszą cyfrę w liczbie a nie ostatnią, to jak przerobić tą funkcje?

Mamy:

znak = dane[dane.length()-1]

I chcę, aby sprawdził pierwszą cyfrę, w jaki sposób to można zamienić?

komentarz 12 maja 2016 przez Evelek Nałogowiec (28,960 p.)

Czy zamiana na:

znak = dane[0];

jest poprawna?

komentarz 12 maja 2016 przez criss Mędrzec (172,590 p.)
Tak

Podobne pytania

+1 głos
3 odpowiedzi 3,906 wizyt
pytanie zadane 6 października 2016 w C i C++ przez Arek Użytkownik (510 p.)
0 głosów
0 odpowiedzi 735 wizyt
pytanie zadane 15 kwietnia 2017 w Java przez plkpiotr Stary wyjadacz (12,420 p.)
0 głosów
2 odpowiedzi 307 wizyt
pytanie zadane 29 grudnia 2016 w C i C++ przez breeg Początkujący (390 p.)

93,187 zapytań

142,203 odpowiedzi

322,022 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2345p. - dia-Chann
  2. 2306p. - Łukasz Piwowar
  3. 2295p. - Łukasz Eckert
  4. 2282p. - CC PL
  5. 2252p. - Tomasz Bielak
  6. 2219p. - Łukasz Siedlecki
  7. 2215p. - rucin93
  8. 2201p. - Michal Drewniak
  9. 2156p. - Marcin Putra
  10. 2152p. - Adrian Wieprzkowicz
  11. 2105p. - Mikbac
  12. 1941p. - Anonim 3619784
  13. 1733p. - rafalszastok
  14. 1480p. - Michał Telesz
  15. 1469p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...