Strona 1 z 1

[+] Nauka, banalne zadanie c++

: 30 marca 2010, 15:51
autor: robero
Nie śmiać się bo ja się uczę. Mógłby ktoś to skompilować i powiedzieć mi dlaczego pierwszy model się nie wyświetla? Nie mogę tego zrozumieć.

Kod: Zaznacz cały

#include <iostream>
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include <climits>
#include <string>
#include <iomanip>


int mygetch(void)
{
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}

using namespace std;

int main()
{
    char marka[3][10];
    char model[3][10];
    float poj[3][4];
    short max[3][3];
    short poj_razem=0;
    short max_sr=0;
    for(short i=0; i<3; i++)
    {
        cout<<endl<<"Podaj markę samochodu: ";
        cin>>marka[i];
        cout<<endl<<"Podaj model samochodu "<<marka[i]<<": ";
        cin>>model[i];
        cout<<endl<<"Podaj pojemność tego samochodu: ";
        cin>>poj[i][4];
        cout<<endl<<"Podaj prędkość maksymalną tego samochodu: ";
        cin>>max[i][3];
    }
    for(short i=0; i<3; i++)
    {
        cout<<endl<<marka[i]<<" "<<model[i]<<" "<<poj[i][4]<<" "<<max[i][3];
    }
    for(short i=0; i<3; i++)
    {
        poj_razem+=poj[i][4];
    }
    for(short i=0; i<3; i++)
    {
        max_sr+=max[i][3];
    }

    max_sr/=3;

    cout<<endl<<"Łączna pojemność to: "<<poj_razem;
    cout<<endl<<"Średnia prędkość to: "<<max_sr;






    cout<<endl<<endl;
    mygetch();
    return 0;
}

: 30 marca 2010, 16:55
autor: Rafal_F
Zmienne liczbowe, czyli w twoim przypadku shor i float przechowują w sobie całą liczbę, nie musisz tworzyć w tablicy osobnej komórki dla każdego znaku:

Kod: Zaznacz cały

float poj[3];
short max[3];
Resztę kodu pozmieniaj sobie sam.
Tablicę numeruje się od 0 do zadeklarowanej pojemności -1. Czyli w linijkach:

Kod: Zaznacz cały

cin>>poj[i][4];
...
cin>>max[i][3];
Wychodziłeś poza zakresy tablic, co skutkowało nadpisaniem danych leżących za tablicami, w jednej z takich pętli była właśnie nadpisywana tablica model, dlatego w czasie wyświetlania pokazywała się błędna wartość.

Dodatkowo powinieneś pilnować, czy kiedy powinno się wpisać liczbę, użytkownik na pewno wpisał liczbę, a nie jakiś inny tekst, oraz powinieneś zwrócić uwagę na to ile znaków wpisuje/może wpisać użytkownik, żeby nie przepełnił tablic.

: 30 marca 2010, 17:09
autor: robero
Dzięki Rafal_F. Działa.

: 30 marca 2010, 17:40
autor: tremor
Dziwne, u mnie działa.

: 30 marca 2010, 19:33
autor: Rafal_F
Czasem działa, czasem nie, taki urok tego typu błędów.

: 30 marca 2010, 22:44
autor: tremor
Rafal_F pisze:Czasem działa, czasem nie, taki urok tego typu błędów.

No cóż, dawno nie miałem do czynienia z C++. W Javie ArrayIndexOutOfBoundsException gwarantowane ;) .