Sprawdzanie, czy coś jest zapisane pod zmienną.
Ostatnio zmodyfikowano 2017-03-23 23:04
| 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: #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 tab1nic 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 :)
 
 | 
|  | 
| latajacaryba | » 2017-03-23 22:37:54 Pod zmienną zawsze jest coś zapisane. Sprawdź to: #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) int a; int main()
 {
 int b;
 }
 
Zmienna globalna (jeśli nic do niej nie przypiszesz) dla int'a ma wartość 0 #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 | 
|  | 
| 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). int arr[ 10 ] { }; int i { };
 while( i < 10 && arr[ i ] != 0 ) {
 std::cout << arr[ i ] << '\n';
 }
 | 
|  | 
| 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. | 
|  | 
| 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ą.Tablice jednowymiarowe Akapit  Tablice, a stabilność aplikacji | 
|  | 
| 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ź :) | 
|  | 
| « 1 » |