Program zwraca zawsze wartość -1, a nie powinien
Ostatnio zmodyfikowano 2014-05-25 16:03
Loreno Temat założony przez niniejszego użytkownika |
Program zwraca zawsze wartość -1, a nie powinien » 2014-05-24 08:43:41 Witam, Napisałem program, który powinien wyświetlać ile liczb zostało wpisane przez użytkownika. Kiedy użytkownik wpisze wartość -1, to wpisywanie liczb ma się zakończyć i wyświetlana jest ilość wpisanych liczb. Niestety jednak zawsze pokazuje się komunikat: "Wpisano -1 liczb". Co ciekawe, kiedy zmienię w kodzie liczbę -1 na np. -2, to program działa poprawnie. Ustawiłem limit wpisywanych liczb na 30. Kiedy wpiszę 30 liczb (czyli nie przerwę wpisywania przez podanie -1) to program również działa poprawnie. Czemu tak się dzieje? #include <iostream> #include <cstring>
using namespace std;
int main() { int tab[ 30 ]; int i; char odmiana[ 6 ]; for( i = 1; i < 31; i++ ) { cout << "Wpisz liczbe " << i << ": "; cin >> tab[ i - 1 ]; if( tab[ i - 1 ] ==( - 1 ) ) break; } if(( i - 1 ) == 1 ) strcpy( odmiana, "liczbe" ); if(((( i - 1 ) >= 5 ) &&(( i - 1 ) <= 21 ) ) ||((( i - 1 ) >= 25 ) &&(( i - 1 ) <= 30 ) ) ) strcpy( odmiana, "liczb" ); else strcpy( odmiana, "liczby" ); cout << "Wpisano " << i - 1 << " " << odmiana << endl; return 0; }
|
|
Jacob99 |
» 2014-05-24 09:47:14 Zobacz tak: #include <iostream> #include <cstring>
using namespace std;
int main() { int tab[ 30 ]; int l = 0, i = 0; for( l = 30; l != 0; l-- ) { tab[ l ] = 0; } while( tab[ l ] != false || l < 30 ) { cout << "\nPodaj liczbe " << l + 1 << ": "; cin >> i; if( i == - 1 ) { tab[ l ] = false; break; } else { tab[ l ] = i; l++; } } cout << "Wpisano " << l + 1 << " liczb/liczbe/liczby." << endl; return 0; }
|
|
Loreno Temat założony przez niniejszego użytkownika |
» 2014-05-24 13:33:50 Dzięki, ale dlaczego mój sposób nie działa? |
|
pekfos |
» 2014-05-24 16:06:56 Wychodzisz poza tablice odmiana.
Jacob99: A ty poza tablicę tab.
|
|
Nitr0Skay |
» 2014-05-24 20:29:42 Panie Pekfos, z tego co mi wiadomo, to funkcja strcpy() nie sprawdza, czy łańcuch kopiowany zmieści się w tablicy docelowej. Przynajmniej tak jest napisane tutaj: http://cpp0x.pl/dokumentacja/standard-C/strcpy/430 Chyba że czegoś nie uwzględniłem. |
|
MrPoxipol |
» 2014-05-24 20:45:59 Ja nie widzę, żeby pekfos temu przeczył, panie Marcinie. |
|
Nitr0Skay |
» 2014-05-24 21:46:23 nie sprawdza, czy łańcuch kopiowany zmieści się w tablicy docelowej. Czyli wydaje mi się, że nie da się wyjść po za tablicę odmiana
Wychodzisz poza tablice odmiana
P.S Jak się tutaj cytuje posty ? xd |
|
MrPoxipol |
» 2014-05-25 10:14:26 Kurs STCnie sprawdza, czy łańcuch kopiowany zmieści się w tablicy docelowej. | Czyli wydaje mi się, że nie da się wyjść po za tablicę odmiana |
Da. |
|
« 1 » 2 |