Program zbierający i zapisujący dane.
Ostatnio zmodyfikowano 2016-05-17 06:31
latajacaryba Temat założony przez niniejszego użytkownika |
Program zbierający i zapisujący dane. » 2016-05-15 22:57:35 Witam. Jestem początkujący w c++ i mam pewien problem. Chciałbym stworzyć program, w którym 10 użytkowników podawałoby swoje dane a następnie byłyby one zapisywane. Jak zrobić to przy użyciu pętli? Bo komputer zapamiętuje dane i nie daje ich wpisać drugi raz?
#include<iostream> #include<fstream> #include<stdlib.h> using namespace std; string imie, nazwisko; int nr, i; int main() { fstream zapis;
for (i=0; i<=10; i++){zapis.open("notatnik.txt",ios::out | ios::app); cout<<"podaj imie: "; cin>>imie; cout<<"podaj nazwisko: "; cin>>nazwisko; cout<<"podaj numer telefonu: "; cin>>nr;
zapis<<"imie: "<<imie<<endl; zapis<<"nazwisko: "<<nazwisko<<endl; zapis<<"numer telefonu: "<<nr<<endl; zapis.close(); }
return 0; } i efekt jest dziwny, bo czasami da się wpisać kilka osób, a czasami tylko jedną i konsola wyświetla nieprzerwany ciąg "podaj imie: podaj nazwisko: podaj numer: podaj imie: podaj nazwisko: podaj numer: ... przy czym podać się ich nie da. Proszę o pomoc oraz poprawić mój program tak, żeby działał zgodnie z założeniem (jeśli się da taki zrobić z pętlą). Aha i nie wiem czy to ma znaczenie ale pisałem na code blocks 16.01 :)
|
|
carlosmay |
» 2016-05-16 00:04:07 Aha i nie wiem czy to ma znaczenie ale pisałem na code blocks 16.01 :) |
Znaczenie ma kompilator. C::B to edytor tekstu. Otwieranie pliku przy każdej iteracji pętli? while( cin >> zmienna1 >> zmienna2 >> zmienna3 ) { file << znienna1 << ' ' << zmienna2 << ' ' << zmienna3; } Tak będzie bezpieczniej. cout << "podaj numer telefonu: "; cin >> nr; |
To jest newralgiczny punkt kodu. Wprowadzenie błędnych danych powoduje zablokowanie strumienia w stanie błędu, bo nie czyścisz strumienia. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
rozwiązane (chyba) » 2016-05-16 23:41:50 Już wiem w czym był problem, prawdopodobnie taki, że mam zmienne string (imie, nazwisko) oraz int (nr) i żeby przetestować działanie wpisywałem byle co np. liczby w imieniu lub litery w numerze. Prosiłbym jednak o wytłumaczenie mi tego sposobu, który miałeś namyśli, tylko w sposób prosty, uczę się tego od tygodnia i nie znam większości słów czy zwrotów. Niedługo przyjdzie mi książka i wtedy je poznam więc bez odsyłania do tysięcy poradników proszę. Czy np. da się zrobić pętle, w której wpiszemy dane, potem zostaną one zapisane w notatniku a potem "zapomniane" przez komputer tak, by móc je znowu wpisać? Z góry dziękuję :) |
|
carlosmay |
» 2016-05-17 06:31:26 Wprowadzenie błędnych danych powoduje zablokowanie dostępu do obiektu (ustawiana jest flaga błędu dla strumienia wejściowego). Od tej chwili wszelkie operacje na są ignorowane. Aby ponownie można było korzystać z należy: std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
Co do pętli: w poprzednim poście jest właśnie taki przykład działania, o który pytasz. W wolnym tłumaczeniu: wczytuj dane póki udaje się wczytać, czyli wpisanie błędnych danych spowoduje opuszczenie pętli. Słowo while . Tutaj są informacje n/t obsługi strumienia wejściowego[/code] |
|
« 1 » |