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

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

#include <iostream>

using namespace std;

int main()
{
    int liczba_1 ;
    while ( liczba_1 != '|')
    {
        cin >> liczba_1;
        cout << liczba_1 << endl;
    }
    cout << "wykonane";
    return 0;
}
1

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

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

lub

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

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

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).

0

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

0

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

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

0
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;

}
0

@kameleo327

A gdzie wprowadzanie?

0

dalej nie dziala

0

wpisujac jakaś liczbe leci mi ciag liczb innych

0
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

0

a za pomoca niechlubnego goto?

2

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1