CCbolt Temat założony przez niniejszego użytkownika |
Lekcja 9 » 2016-07-06 17:14:50 Trochę zgłupiałem w środkowej części
Strumień jest pusty, więc nie można z niego pobrać danych, a więc użytkownik musi wprowadzić nowe dane do strumienia. Wprowadźmy teraz do strumienia następujące dane: 12345, 321. Po wciśnięciu klawisza ENTER dane te trafiają do bufora strumienia wejściowego, z którego następnie odczytywane są dane. Po wczytaniu liczby w buforze strumienia wejściowego zostaną następujące dane: , 321. Czy 2+2 wynosi 4? Co się teraz stanie, gdy zechcemy wczytać kolejną liczbę? Strumień stwierdzi, że pierwszym znakiem w strumieniu jest znak ,, który nie jest liczbą, a więc nie zostanie wczytana liczba. Operacja wczytywania się nie powiedzie, a flaga błędu zostanie ustawiona.
Przeleciałem tematy na forum ale nigdzie nie widzę jak to zrobić, w jednym z tematów administrator zaś twierdził że dane " , 321. Czy 2+2 wynosi 4? " mają się nie wyświetlać. |
|
biznet40 |
» 2016-07-06 19:28:11 Masz tu programik skompiluj go sobie wlacz wpisz to co masz wpisac czyli "12345, 321. Czy 2+2 wynosi 4?" i zobacz co sie stanie. a jesli wczytasz ", 321. Czy 2+2 wynosi 4?" czyli resztę to strumien wejscia nie odczyta przecinka jako cyfre (bo to nie jest cyfra) i zamieni to w 0 nie wczyta liczb nawet po przecinku. A dzieje sie tak poniewaz zmienna "int" wczytuje tylko liczby całkowite czyli ->1,2,3,0,128 itp.
Łatwiej sie nie da.
Programik:
--------------------------------------- #include <iostream>
using namespace std;
int main() { int a; cout<<">> ";cin>>a; cout<<"Tylko to sie wczyta: "<<a; return 0; }
--------------------------------------- |
|
CCbolt Temat założony przez niniejszego użytkownika |
» 2016-07-06 22:23:43 Dzięki coś załapałem ale programik był zawiły dla mnie. W zadaniu domowym kod pisałem na kilka sposobów później zainteresowałem się jednym tematem i uprościłem kod na ile mogłem Teraz takie pytanie czy powinienem usunąć jedną z linii czy autor najzwyczajniej w świecie nie potrzebnie ją wstawił, chodzi o 6 linię od końca "cout << endl << endl;". Jak można jeszcze bardziej uprościć kod tak aby był zrozumiały? Moj #include <iostream>
using namespace std; float a, b, c; bool d, e, f;
int main()
{ cout << "Podaj pierwsza liczbe:"; cin >> a; d = cin.good(); cin.clear(); cin.sync(); cout << "Podaj druga liczbe:"; cin >> b; e = cin.good(); cin.clear(); cin.sync(); cout << "Podaj trzecia liczbe:"; cin >> c; f = cin.good(); cin.clear(); cin.sync(); cout << endl << endl; cout << "I " << a << " Wczytano? " << d << endl; cout << "II " << b << " Wczytano? " << e << endl; cout << "III " << c << " Wczytano? " << f << endl; return 0; }
Autora z innego tematu #include<iostream> using namespace std; float a, b, c; bool i, j, k;
int main() { cout << "Wprowadz liczbe I: "; cin >> a; i = cin.good(); cin.clear(); cin.sync();; cout << "Wprowadz liczbe II: "; cin >> b; j = cin.good(); cin.clear(); cin.sync(); cout << "Wprowadz liczbe III: "; cin >> c; k = cin.good(); cin.clear(); cin.sync(); cout << endl << endl; cout << "Liczba I: " << a << " Czy udalo sie wczytac: " << i << endl; cout << "Liczba II: " << b << " Czy udalo sie wczytac: " << j << endl; cout << "Liczba III: " << c << " Czy udalo sie wczytac: " << k << endl; return 0; }
|
|
carlosmay |
» 2016-07-06 23:43:19 cin >> a; d = cin.good(); cin.clear(); cin.sync(); |
Przez takie jednolinijkowce kod traci na czytelności. Nie chodzi o to żeby kod był maksymalnie krótki, tylko czytelny i zrozumiały. Dwa razy przejście do nowej linii. Czy potrzebne? Nie wiem. |
|
uruken |
» 2016-07-09 17:42:16 Mój kod do tego zadania wygląda nieco inaczej: #include <iostream> #include <limits> int main() { float a; float b; float c; bool atak = std::cin.good(); bool btak = std::cin.good(); bool ctak = std::cin.good(); std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "Podaj liczbe rzeczywista (a): "; std::cin >> a; std::cout << "Podaj liczbe rzeczywista (b): "; std::cin >> b; std::cout << "Podaj liczbe rzeczywista (c): "; std::cin >> c; std::cout << "Liczba a =" << a << "Wczytano ? " << std::cin.good() << std::endl; std::cout << "Liczba b =" << b << "Wczytano ? " << std::cin.good() << std::endl; std::cout << "Liczba c =" << c << "Wczytano ? " << std::cin.good() << std::endl; }
Ale borykam się z tym że jeśli podam do wczytania literę lub połączenie liter i cyfr to program nie czeka na kolejne odpowiedzi (drugą i trzecią) i kończy działanie. Nie potrafie dojść co powoduje takie zachowanie. |
|
neferx |
» 2016-07-09 18:13:13 Przypisałeś sobie: bool atak = std::cin.good(); bool btak = std::cin.good(); bool ctak = std::cin.good();
1. Każdy bool musi występować bezpośrednio po wprowadzeniu danych przez użytkownika, czyli cin >> 2. Mimo, że zadeklarowałeś sobie 'wartości' bool , to przy wyprowadzeniu danych ponownie deklarujesz całe std::cin.good() i zadeklarowanych booli nie używasz. std::cout << "Liczba a =" << a << "Wczytano ? " << std::cin.good() << std::endl; std::cout << "Liczba b =" << b << "Wczytano ? " << std::cin.good() << std::endl; std::cout << "Liczba c =" << c << "Wczytano ? " << std::cin.good() << std::endl;
3. std::cin.clear(); std::cin.sync();
Przed każdym wprowadzeniem danych cin >> a; cin >> b; cin >> c;
|
|
carlosmay |
» 2016-07-09 20:01:31 Ale borykam się z tym że jeśli podam do wczytania literę lub połączenie liter i cyfr to program nie czeka na kolejne odpowiedzi |
Ponieważ strumień po niepowodzeniu wczytywania ustawia flagę błędu i pomija wszystkie operacje wejścia, do momentu wyzerowania flag. Oczywiście trzeba pamiętać też o zadbaniu, aby kolejne wczytywanie było poprawne. |
|
Orenz12 |
» 2016-07-11 15:10:35 Natomiast mój kod wygląda następująco: #include <iostream> using namespace std; int main() { float zmiennajeden; float zmiennadwa; float zmiennatrzy; cout << "Podaj liczbe pierwsza:" << endl; cin >> zmiennajeden; cout << "Podaj liczbe druga:" << endl; cin.clear(); cin.sync(); cin >> zmiennadwa; cout << "Podaj liczbe trzecia:" << endl; cin.clear(); cin.sync(); cin >> zmiennatrzy; cout << "\nLiczba pierwsza to: " << zmiennajeden << "\nCzy udalo sie wczytac? " << cin.good() << "\nCzy cos nawalilo? " << cin.fail() << endl; cout << "\nLiczba druga to: " << zmiennadwa << "\nCzy udalo sie wczytac? " << cin.good() << "\nCzy cos nawalilo? " << cin.fail() << endl; cout << "\nLiczba trzecia to: " << zmiennatrzy << "\nCzy udalo sie wczytac? " << cin.good() << "\nCzy cos nawalilo? " << cin.fail() << endl; }
Mam jednak problem z definiowaniem bool, nie wiem jak to zrobić. Doczytałem, że powinien być po każdym wprowadzeniu danych, ale sposobu zapisu nie znam. Napisze ktoś? |
|
« 1 » 2 3 |