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

Program zbierający i zapisujący dane.

Ostatnio zmodyfikowano 2016-05-17 06:31
Autor Wiadomość
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 :)
P-148274
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?

C/C++
while( cin >> zmienna1 >> zmienna2 >> zmienna3 )
{
    file << znienna1 << ' ' << zmienna2 << ' ' << zmienna3;
}
Tak będzie bezpieczniej.

C/C++
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.
P-148280
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ę :)
P-148317
carlosmay
» 2016-05-17 06:31:26
Wprowadzenie błędnych danych powoduje zablokowanie dostępu do obiektu
C/C++
std::cin
 (ustawiana jest flaga błędu dla strumienia wejściowego).
Od tej chwili wszelkie operacje na
C/C++
std::cin
 są ignorowane.
Aby ponownie można było korzystać z
C/C++
std::cin
 należy:
C/C++
std::cin.clear(); // w pierwszej kolejności wyzerować flagi błędów
std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
// opróżnić bufora strumienia z błędnych danych

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]
P-148321
« 1 »
  Strona 1 z 1