Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sprawdzanie, czy coś jest zapisane pod zmienną.

Ostatnio zmodyfikowano 2017-03-23 23:04
Autor Wiadomość
Qabrix
Temat założony przez niniejszego użytkownika
Sprawdzanie, czy coś jest zapisane pod zmienną.
» 2017-03-23 22:28:09
Dzień dobry,
od niedawna zaczynam zabawę z programowaniem w C++. Zastanawiam się, jak sprawdzić czy czy coś jest zapisane pod zmienną.

napisałem taki program:
C/C++
#include <iostream>
#include <conio.h>

int main()
{
    using namespace std;
   
    double tab1[] = {( 2 + 7 * 16 - 8 ),( 22 * 2 / 11 ),( 8383 - 222 + 292 * 8 ),( 5 * 2 * 4 ) };
   
    int i = 0;
    while( tab1[ i ] )
    {
       
        cout << tab1[ i ] << endl;
        i++;
    }
   
}

i chciałbym, aby pętla zatrzymała się gdy pod tab1 nic nie będzie zapisane.

gdy odpalam program otrzymuję coś takiego w konsoli:

-------------------------------------------
106
4
10497
40
8.48931e-314
6.95254e-308
1.78807e-307
1.54882e+231
1.78807e-307
5.57491e-307
4.24688e-314
6.95268e-308
3.10996e-314
1.78824e-307
4.94066e-324
-1.#QNAN
3.23786e-319
1.06924e+257
1.06922e+257
6.95321e-308
1.#QNAN
1.99158e-314
1.#QNAN
3.23292e-192
-1.22542e-191
6.95295e-308
6.95324e-308
-3.55959e-271
6.95327e-308
-1.#QNAN
9.91674e-315
1.78821e-307
1.06093e-314
6.89023e-313
2.77302e-310
1.08694e-321
1.58101e-322
2.122e-314
1.10344e-312
2.122e-314

Process returned 0 (0x0)   execution time : 0.094 s
Press any key to continue.

-------------------------------------------

Z góry dziękuję za pomoc :)
P-159308
latajacaryba
» 2017-03-23 22:37:54
Pod zmienną zawsze jest coś zapisane. Sprawdź to:
C/C++
#include <iostream>
int main()
{
    int i;
    std::cout << "pod zmienna i: " << i << " - smieci";
    return 0;
}
Jeśli nic nie zapiszesz do zmiennej, to będą tam śmieci(pozostałości w pamięci po innych programach), chyba, że zmienna jest globalna(czyli po mainem)
C/C++
int a; //zmienna globalna
int main()
{
    int b; // zmienna lokalna
}
Zmienna globalna (jeśli nic do niej nie przypiszesz) dla int'a ma wartość 0

C/C++
#include <iostream>
int j;
int main()
{
    int i;
    std::cout << "pod zmienna lokalna i: " << i << " - smieci" << std::endl;
    std::cout << "pod zmienna globalna j: " << j << " - zero";
    return 0;
}

Przy czym odradza się stosowania zmiennych globalnych
P-159309
karambaHZP
» 2017-03-23 22:41:14
Tak to nie działa. Tablicę kontrolujesz wg jej rozmiaru, czyli pilnujesz, aby nie czytać poza nią.
W tym przypadku pilnujesz czy indeks tablicy nie jest większy niż 4.
Jeśli masz niecałkowicie zapełnioną tablicę, możesz sprawdzać czy liczba w tablicy jest, jakiejś konkretnej wartości
(pod warunkiem, że ta wartość posłużyła wcześniej do zainicjalizowania elementów tablicy).
C/C++
int arr[ 10 ] { }; // inicjalizacja zerami
int i { };
while( i < 10 && arr[ i ] != 0 ) {
    std::cout << arr[ i ] << '\n';
}
P-159311
Qabrix
Temat założony przez niniejszego użytkownika
Sprawdzenie czy coś się samemu w niej zapisało.
» 2017-03-23 22:52:13
Czyli rozumiem, że nie ma możliwości sprawdzenia czy, np w tym przypadku, pod powiedzmy tab1[4] coś zapisałem ja w kodzie, czy już tam było.
P-159313
karambaHZP
» 2017-03-23 22:54:55
Nie, bo
tab[ 4 ]
 jest elementem nienależącym do tej tablicy (obca pamięć) i jest to niezdefiniowane zachowanie.
Niezgodne ze standardem.

Zapamiętaj: operując na tablicy, pilnujesz jej indeksu, aby nie czytać poza tablicą.
» Kurs C++ » Poziom 2Tablice jednowymiarowe lekcja
Akapit

Tablice, a stabilność aplikacji

P-159314
Qabrix
Temat założony przez niniejszego użytkownika
Dziękuję za pomoc.
» 2017-03-23 23:04:55
Dobrze, w takim razie dziękuję za pomoc i szybką odpowiedź :)
P-159315
« 1 »
  Strona 1 z 1