Dlaczego pętla while po spełnieniu warunku daje 0?

Dlaczego pętla while po spełnieniu warunku daje 0?
B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 42
0

Dlaczego pętla while po spełnieniu warunku daje 0? rozumiem ze chodzi o to ze spelnieniem warunku jest' |' bo jak daje np na spelnienie 12 to wszystko dziala. ale nie wiem jak to naprawic probowalem też dac:

char koniec = '|'

i to podstawic do warunku w petli ale tez nie dziala

Kopiuj
#include <iostream>

using namespace std;

int main()
{
    int liczba_1 ;
    while ( liczba_1 != '|')
    {
        cin >> liczba_1;
        cout << liczba_1 << endl;
    }
    cout << "wykonane";
    return 0;
}
QB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 82
1

Sprawdzasz czy liczba, ktora jest typu int jest rowna znakowi. Zmien zmienna ktora sprawdzasz na typ znakowy.

Kopiuj
   char znak;
   do {
       cin >>znak;
       cout << znak<< endl;
    } while (znak != '|');

lub

Kopiuj
 char znak;
 cin >> znak;
 while ( znak  != '|')
    {
        cin >> znak;
        cout << znak << endl;
    }

E: Poprawilem swoje rozwiazanie aby pozbyc sie UB, ktory dostrzegl krzaq.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
4

Masz UB, sprawdzasz wartość liczba_1 zanim cokolwiek do niej przypiszesz.

W obecnym porównaniu porównujesz do wartości znaku (najprawdopodobniej w ASCII), gdzie | to 124. Jak chcesz wczytywać znaki to wczytuj do znaków (char).

B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 42
0

drukowane na ekranie maja byc liczby typu int a nie char :/

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

To świetnie, to drukuj inty. A wczytuj char.

B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 42
0

int main()
{
char znak_1, znak_2;

while ( znak_1 != '|' || znak_2 != '|' )
{
    cin >> znak_1 >> znak_2;

    int liczba_1 = znak_1;
    int liczba_2 = znak_2;

    cout << liczba_1 << '\t' << liczba_2 << endl;
}
cout << "wykonane";
return 0;

}
nie wiem jak to powinno wygladac tak samo z tym ub nic sie nie dzieje po wpisaniu przed petla

kameleo327
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 79
0
Kopiuj
int main()
{
	char z1, z2;

	cout << "Podaj wartosc pierwsza: ";
	cin >> z1;

	cout << "Podaj wartosc rdruga: ";
	cin >> z2;

	while (z1 != '|' || z2 != '|')
	{
		cout << (int)z1 << '\t' << (int)z2 << endl;
	}

	cout << "wykonane";
	_getch();

	return 0;

}
  • Rejestracja: dni
  • Ostatnio: dni
0

@kameleo327

A gdzie wprowadzanie?

B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 42
0

dalej nie dziala

B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 42
0

wpisujac jakaś liczbe leci mi ciag liczb innych

B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 42
0
Kopiuj
int main()
{
    char z1, z2;

    cout << "Podaj wartosc pierwsza: ";
    cin >> z1;

    cout << "Podaj wartosc rdruga: ";
    cin >> z2;

    while (z1 != '|' || z2 != '|')
    {

        cout << (int)z1 << '\t' << (int)z2 << endl;
    }

    cout << "wykonane";

    return 0;

}

nie ma jak dzialac bo w srodku petli nic nie wpisujemy ale jak to zrobic skoro przed petla musimy wpisywac

B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 42
0

a za pomoca niechlubnego goto?

QB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 82
2

Skorzystaj z rozwiazania, w ktorym uzylem "do while". Instrukcje zostana wykonane przed sprawdzaniem warunku i problem rozwiazany.

Kopiuj
   char znak;
   do {
       cin >>znak;
       cout << znak<< endl;
    } while (znak != '|');

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.