• 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

0 głosów
1,316 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,570 p.)
Tak

Podobne pytania

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

93,633 zapytań

142,558 odpowiedzi

323,058 komentarzy

63,142 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
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

Kursy INF.02 i INF.03
...