CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Użycie komendy sscanf i fgets

Użycie komendy sscanf i fgets

dział ogólny

Użycie komendy sscanf i fgets

Nowy postprzez bajtolini » czwartek, 22 grudnia 2011, 17:27

Dobry,
jak w temacie mam problem z uzyciem tych dwoch komend w programie na studia
(to jest tresc zadania)
2. Stworzyć plik tekstowy, w którym wiersze stanowiące komentarz rozpoczynają się od znaku #. W pozostałych wierszach umieszczone zostały wartości konfiguracyjne (czas, predkosc, sila). Plik opcje.cfg może mieć postać:
#komentarz1
czas 0.1
#komentarz 2
sila 99.4
#sd
# komentarz 3
predkosc 4.5

Napisać funkcję odczytującą wartości konfiguracyjne (czas, predkosc, sila) i wpisującą te dane do odpowiedniej struktury. Przydatne funkcje: fgets, sscanf.

a to moje proby
KOD cpp:     UKRYJ  
int main()
{
        FILE * plik; // tworzymy wskaznik do pliku
        float predkosc,czas,sila;
        char komentarzP[15],komentarzC[15],komentarzS[15];
        cout<<"Podaj wartosc predkosci (tylko liczba)"<<endl;
        cin>>predkosc;
        cout<<endl<<"Podaj wartosc czasu (tylko liczba)"<<endl;
        cin>>czas;
        cout<<endl<<"Podaj wartosc sily (tylko liczba)"<<endl;
        cin>>sila;
        cout<<endl<<"Podaj komentarz do predkosci (15znakow)"<<endl;
        cin>>komentarzP;
        cout<<endl<<"Podaj komentarz do czasu (15znakow)"<<endl;
        cin>>komentarzC;
        cout<<endl<<"Podaj komentarz do sily (15znakow)"<<endl;
        cin>>komentarzS;
        //1 - zapisujemy dane do pliku
        plik=fopen("dane.txt","w"); // otwieramy plik do zapisu
        if (plik!=NULL) //jezeli udalo sie otworzyc plik
        {
                fprintf (plik ,"#%s - predkosc %f\n#%s\nczas %f\n#%s\nsila %f",komentarzP,predkosc,komentarzC,czas,komentarzS,sila); // zapisujemy dane
                fclose(plik); // i zamykamy plik
        }
        /*Dane zmienne;
        odczyt(zmienne);
        cout<<endl<<zmienne.predkosc<<endl<<zmienne.czas<<endl<<zmienne.sila;
        getchar();*/

        plik=fopen("dane.txt","r");
        char sniadanie[100];
        float proba;
        fgets(sniadanie,100,plik);
        cout<<sniadanie<<endl;
        getchar();
        getchar();
        sscanf(sniadanie,"%*s %f",&proba);
        cout<<proba;
        getchar();
        fclose(plik);
        return 0;
}
 


ogolem rozumiem co mam zrobic ale i jak to napisac w programie ale nie wiem jakie zastosowanie dokladnie maja funkcje sscanf i fgets oraz jakie parametry musza dostac (rowniez jak w przypadku uzycia funkcji fgets odczytac kolejna linijke tekstu z pliku a nie znowu pierwsza).
Bylbym bardzo wdzieczny za przynajmniej wyjasnienie tych dwoch komend.
Z gory dzieki.
Avatar użytkownika
bajtolini
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): czwartek, 22 grudnia 2011, 17:21
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: Visual Studio 2010
Gadu Gadu: 0
    Windows XPOpera

Re: Użycie komendy sscanf i fgets

Nowy postprzez polymorphism » czwartek, 22 grudnia 2011, 18:11

jak w przypadku uzycia funkcji fgets odczytac kolejna linijke tekstu z pliku a nie znowu pierwsza

fgets czyta linię ze strumienia i przesuwa wskaźnik odczytu, czyli każde następne wywołanie tej funkcji na tym samym pliku będzie czytać kolejne linie.

Co do sscanf, to:
KOD cpp:     UKRYJ  
char nazwa_parametru[50];
...
if(sscanf(sniadanie, "%s %f", nazwa_parametru, &proba) == 2)
{
        // OK
}
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Użycie komendy sscanf i fgets

Nowy postprzez bajtolini » czwartek, 22 grudnia 2011, 18:17

co do wykorzystania fgets to juz rozumiem ale sscanf nie....
KOD cpp:     UKRYJ  
char nazwa_parametru[50];
 ...
if(sscanf(sniadanie, "%s %f", nazwa_parametru, &proba) == 2)
{
         // OK
}
 

dlaczego jest napisane w warunku ==2 i czy pod nazwa_parametru wstawiana jest wartosc z %s a pod proba %f?
Avatar użytkownika
bajtolini
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): czwartek, 22 grudnia 2011, 17:21
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: Visual Studio 2010
Gadu Gadu: 0
    Windows XPOpera

Re: Użycie komendy sscanf i fgets

Nowy postprzez polymorphism » czwartek, 22 grudnia 2011, 18:24

Może do dokumentacji byś zajrzał, co? Tam jest wszystko opisane. %s dajesz jak chcesz odczytać ze strumienia jakiś łańcuch znaków. %f - jeśli chcesz odczytać liczbę zmiennoprzecinkową. Warunek jest po to, żeby mieć pewność, że dane zostały poprawne odczytane - dwie zmienne, stąd ta dwójka.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
bajtolini
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Użycie komendy sscanf i fgets

Nowy postprzez bajtolini » piątek, 23 grudnia 2011, 04:16

ok zrobilem. chwile musialem pomyslec i mnie oswiecilo... sorki za klopot ale naprawde jestem zielony w c++ bo dopiero od 4miesiecy w nim pisze.
Avatar użytkownika
bajtolini
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): czwartek, 22 grudnia 2011, 17:21
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: Visual Studio 2010
Gadu Gadu: 0
    Windows XPOpera


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 13 gości