Brak flagi błędu podczas wczytania + brak rozszerzenia dziesiętnego dla double
Ostatnio zmodyfikowano 2015-01-13 16:20
seishi00 Temat założony przez niniejszego użytkownika |
Brak flagi błędu podczas wczytania + brak rozszerzenia dziesiętnego dla double » 2015-01-12 16:05:07 Witam, Poniższy kod ma 2 problemy #include <iostream> using namespace std;
double wyn;
int ilcz, mian;
template < typename type > type get() { type liczba; while( !( cin >> liczba ) ) { cout << "Podaj poprawna wartosc liczbowa "; cin.clear(); cin.sync(); } return liczba; };
int main() { char x; cout << "Podaj liczbe calkowita, ktora bedzie licznikiem: "; ilcz = get < int >(); cout << "Podaj liczbe calkowita, ktora bedzie mianownikiem (inna od 0): "; while(( mian = get < int >() ) == 0 ) { if( mian == 0 ) cout << "Mianownik nie moze byc rowny 0! Podaj poprawna wartosc liczbowa: "; } wyn = ilcz / mian; cout << ilcz << "/" << mian << " = " << wyn; cin >> x; return 0; }
PROBLEM 1: Gdy w czasie wykonywania wzorca get<int>() podam wartość 3.3 to nie pojawia się flaga błędu - program wczytuje 3, a .3 pozostaje w buforze powodując błędy w dalszej części programu. PROBLEM 2: Wartość zmiennej wyn dla ilcz=1 i mian=2 jest 0 zamiast 0.5 Z góry dziękuję za pomoc. |
|
Monika90 |
» 2015-01-12 22:20:07 1 Wczytuj do std::string i użyj std::istringstream
2 int / int daje int |
|
seishi00 Temat założony przez niniejszego użytkownika |
» 2015-01-13 16:20:38 Bardzo dziękuję za pomoc. Dla zainteresowanych zamieszczam poniżej poprawiony kod (nie jest on idealny, ale jest lepszy niż poprzedni). #include <iostream> #include <fstream> #include <string> #include <sstream> using namespace std;
float wyn; int ilcz, mian; fstream plik;
template < typename type > type get() { type wart; string wczyt; bool spr = 1; while( spr == 1 ) { cin >> wczyt; istringstream isstream( wczyt ); isstream >> wart; spr = isstream.fail(); if( spr == 1 ) cout << "Podaj poprawna wartosc: "; } return wart; };
int main() { char x; cout << "Wyswietlic zawartosc pliku wyniki.txt czy dodac nowy wpis? [W/D]" << endl; x = get < char >(); while( !( x == 'w' || x == 'W' || x == 'd' || x == 'D' ) ) { cout << "Podaj poprawny znak: "; x = get < char >(); } if( x == 'w' || x == 'W' ) { plik.open( "wyniki.txt", ios::in ); if( plik.good() ) { string linia; while( !plik.eof() ) { getline( plik, linia ); cout << linia << endl; } plik.close(); } } else { if( x == 'd' || x == 'D' ) { cout << "Podaj liczbe calkowita, ktora bedzie licznikiem: "; ilcz = get < int >(); cout << "Podaj liczbe calkowita, ktora bedzie mianownikiem (inna od 0): "; while(( mian = get < int >() ) == 0 ) { if( mian == 0 ) cout << "Mianownik nie moze byc rowny 0! Podaj poprawna wartosc liczbowa: "; } float filcz = static_cast < float >( ilcz ); float fmian = static_cast < float >( mian ); wyn = filcz / fmian; cout << ilcz << "/" << mian << " = " << wyn << endl << endl; cout << "Zapisac wynik do pliku? [T/N]" << endl; x = get < char >(); while( !( x == 't' || x == 'T' || x == 'n' || x == 'N' ) ) { cout << "Podaj poprawny znak: "; x = get < char >(); } if( x == 't' || x == 'T' ) { plik.open( "wyniki.txt", ios::out | ios::app ); if( plik.good() ) { plik << ilcz << "/" << mian << " = " << wyn << endl; cout << "Zapisano." << endl; plik.close(); } } } else cout << "Nie otwarto pliku" << endl; } cin >> x; return 0; }
|
|
« 1 » |