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

Program zwraca zawsze wartość -1, a nie powinien

Ostatnio zmodyfikowano 2014-05-25 16:03
Autor Wiadomość
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?

C/C++
#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;
}
P-110766
Jacob99
» 2014-05-24 09:47:14
Zobacz tak:
C/C++
#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;
}
P-110767
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?
P-110776
pekfos
» 2014-05-24 16:06:56
Wychodzisz poza tablice odmiana.

Jacob99: A ty poza tablicę tab.
P-110788
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.

P-110797
MrPoxipol
» 2014-05-24 20:45:59
Ja nie widzę, żeby pekfos temu przeczył, panie Marcinie.
P-110799
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
P-110802
MrPoxipol
» 2014-05-25 10:14:26
» KursyKurs STC kurs
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
Da.
P-110809
« 1 » 2
  Strona 1 z 2 Następna strona