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

VII - Ciągi znaków, zadanie nr. 4 - problem.

Ostatnio zmodyfikowano 2010-09-19 19:34
Autor Wiadomość
Mateque
Temat założony przez niniejszego użytkownika
VII - Ciągi znaków, zadanie nr. 4 - problem.
» 2010-09-19 17:36:58
Robiąc to zadanie zatrzymałem się dopiero na wprowadzaniu danych. Problem polega na tym, że markę drugiego i trzeciego samochodu program pobiera sobie sam w postaci " ". Pomóżcie noobkowi. :(

C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
   
    const short int ZNAKOW = 50, AUT = 3;
    char marka[ AUT ][ ZNAKOW ], model[ AUT ][ ZNAKOW ];
    int predkosc[ AUT ];
    float silnik[ AUT ];
    //pierwszy samochod
    cout << "Witaj, wprowadz marke 1go samochodu:" << endl;
    cin.getline( marka[ 1 ], ZNAKOW );
    cout << "Wprowadziles marke " << marka[ 1 ] << "." << endl << endl;
   
    cout << "Wprowadz model 1go samochodu:" << endl;
    cin.getline( model[ 1 ], ZNAKOW );
    cout << "Wprowadziles model " << model[ 1 ] << "." << endl << endl;
   
    cout << "Wprowadz predkosc maksymalna samochodu " << marka[ 1 ] << " " << model[ 1 ] << ":" << endl;
    cin >> predkosc[ 1 ];
    cout << "Wprowadziles predkosc wynoszaca " << predkosc[ 1 ] << "." << endl << endl;
   
    cout << "Wprowadz pojemnosc silnika samochodu " << marka[ 1 ] << " " << model[ 1 ] << ":" << endl;
    cin >> silnik[ 1 ];
    cout << "Wprowadziles pojemnosc wynoszaca " << silnik[ 1 ] << "." << endl << endl;
   
    //drugi samochod
    cout << "Wprowadz marke 2go samochodu:" << endl;
    cin.getline( marka[ 2 ], ZNAKOW );
    cout << "Wprowadziles marke " << marka[ 2 ] << "." << endl << endl;
   
    cout << "Wprowadz model 2go samochodu:" << endl;
    cin.getline( model[ 2 ], ZNAKOW );
    cout << "Wprowadziles model " << model[ 2 ] << "." << endl << endl;
   
    cout << "Wprowadz predkosc maksymalna samochodu " << marka[ 2 ] << " " << model[ 2 ] << ":" << endl;
    cin >> predkosc[ 2 ];
    cout << "Wprowadziles predkosc wynoszaca " << predkosc[ 2 ] << "." << endl << endl;
   
    cout << "Wprowadz pojemnosc silnika samochodu " << marka[ 2 ] << " " << model[ 2 ] << ":" << endl;
    cin >> silnik[ 2 ];
    cout << "Wprowadziles pojemnosc wynoszaca " << silnik[ 2 ] << "." << endl << endl;
   
    //trzeci samochod
    cout << "Wprowadz marke 3go samochodu:" << endl;
    cin.getline( marka[ 3 ], ZNAKOW );
    cout << "Wprowadziles marke " << marka[ 3 ] << "." << endl << endl;
   
    cout << "Wprowadz model 3go samochodu:" << endl;
    cin.getline( model[ 3 ], ZNAKOW );
    cout << "Wprowadziles model " << model[ 3 ] << "." << endl << endl;
   
    cout << "Wprowadz predkosc maksymalna samochodu " << marka[ 3 ] << " " << model[ 3 ] << ":" << endl;
    cin >> predkosc[ 3 ];
    cout << "Wprowadziles predkosc wynoszaca " << predkosc[ 3 ] << "." << endl << endl;
   
    cout << "Wprowadz pojemnosc silnika samochodu " << marka[ 3 ] << " " << model[ 3 ] << ":" << endl;
    cin >> silnik[ 3 ];
    cout << "Wprowadziles pojemnosc wynoszaca " << silnik[ 3 ] << "." << endl << endl;
   
   
   
    system( "PAUSE" );
    EXIT_SUCCESS;
}
P-22141
ison
» 2010-09-19 19:34:14
rozważmy ten kawałek kodu:
C/C++
cout << "Wprowadz pojemnosc silnika samochodu " << marka[ 1 ] << " " << model[ 1 ] << ":" << endl;
cin >> silnik[ 1 ];
cout << "Wprowadziles pojemnosc wynoszaca " << silnik[ 1 ] << "." << endl << endl;

//drugi samochod
cout << "Wprowadz marke 2go samochodu:" << endl;
cin.getline( marka[ 2 ], ZNAKOW );
cout << "Wprowadziles marke " << marka[ 2 ] << "." << endl << endl;

cin w twoim programie - wczytuje zmienną do napotkania białego znaku w postaci spacji lub nowej linii
cin.getline - wczytuje i przypisuje ciąg znaków tak długo aż napotka znak nowej linii

wprowadzamy pojemnosc silnika samochodu - dla przykładu liczbę 100
w buforze znajduje się liczba 100 i znak końca linii
liczba 100 jest wyrzuca z bufora i przypisywana pod zmienną
w momencie gdy wywołujesz cin.getline w buforze znajduje się już znak końca linii (tego czego oczekuje metoda getline) zatem zostaje on wyrzucony z bufora i przypisany do zmiennej 'marka'

twoim zadaniem jest wyczyścić bufor z niepotrzebnego znaku końca linii po wczytaniu pojemnosci silnika
oferuje to metoda ignore();

po każdym zwykłym cin w twoim programie dopisz cin.ignore();


kilka przykładów:
1. cin.ignore();
2. cin.ignore(5);
3. cin.ignore(5,'a');

1. zignoruje 1 znak bufora
2. zignoruje 5 znaków bufora o ile nie napotka końca zbioru
3. zignoruje 5 znaków bufora o ile nie napotka litery 'a'
P-22151
« 1 »
  Strona 1 z 1