Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++] Problem z zadaniem


Rekomendowane odpowiedzi

Opublikowano

Witam, mam problem z pewnym zadaniem. Mam napisać program, który będzie pobierał dane z pliku, najpierw ma się zapytać o nazwę pliku, a następnie zapytać się o ilość pobranych linii. Potem ma wypisać w programie to, co pobrał. Napisałem tyle i nie wiem dalej co zrobić.

 

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
string nazwa;
string pytanie1;
string pytanie2;
string ilosclinii;
pytanie1="Jaka jest nazwa pliku?";
pytanie2="Ile linii mam wprowadzic?";
cout << pytanie1 << endl;
cin >> nazwa;
cout << pytanie2 << endl;
cin >> ilosclinii;

ifstream abc;
abc.open("abc", ifstream::in);
     while (abc.good())
     {
         getline(abc , nazwa);
            cout << nazwa << endl;

     }
     abc.close();





return 0;
}

 

You MAD?

Opublikowano

Najpierw warto dać warunek, który sprawdza, czy dany plik istnieje:

if(abc.good()){
 //kod, jeśli plik istnieje
}else
cout<< "nie ma pliku"; 

Mieszasz while' wlasnie z tym warunkiem, a we while'u powinien być getline, który sprawdza, czy nastąpił koniec pliku i ewentualnie ilość lini, które ma wypisać. 

 

Do opena dodaj w pierwszym argumencie zmienną 'nazwa'. Wtedy wpisując nazwę w konsoli otrzymasz zawartość tego pliku.

 

ilosc lini powinna być zmienną całkowitą, nie stringiem.

 

Wypisywanie widziałbym tak:

    for(int i=0; i < ilosclinii ; i++){
        if(!getline(abc , nazwa))break;
        cout << nazwa << endl;
    }

Pętla wykona się tyle razy, ile zadana wartość w ilosclinii, lub gdy plik się skończy.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

Najpierw warto dać warunek, który sprawdza, czy dany plik istnieje:

if(abc.good()){
 //kod, jeśli plik istnieje
}else
cout<< "nie ma pliku"; 

Mieszasz while' wlasnie z tym warunkiem, a we while'u powinien być getline, który sprawdza, czy nastąpił koniec pliku i ewentualnie ilość lini, które ma wypisać. 

 

Do opena dodaj w pierwszym argumencie zmienną 'nazwa'.

 

ilosc lini powinna być zmienną całkowitą, nie stringiem.

 

W razie czego może skorzystać z atoi(ilosclinii.c_str()), ale po co sobie utrudniać zycie :D Chociaż czasem się to przydaje

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano
//s -> pobrana nazwa pliku
s+=".txt";
plik.open(s.c_str(),ios::in|ios::out);
// i -> ilosc lini do pobrania
while(i-->0)
	{
	getline(plik,s);
	cout<<s<<'\n';	
	}

 

Okej, tylko nie wziąłeś pod  uwagę to, że liczba wymaganych linii może przekroczyć ilość linii w pliku.

 

@down ja to już wcześniej napisałem, myślę, że wystarczająco.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

Na szybciora pisalem , widze nawet ,ze ios:out niepotrzebnie napisane ,ale teraz juz powinno smigac jak nalezy ;p

 

while(i--&&getline(plik,s)>0) cout<<s<<'\n'; 

@ UP Napisalem to czego Ty nie napisales 

Ale jest problem, w tym tempie się pogubiłem. :v

Gdzie ja mam to wkleić, mógłbym prosić o cały kod? ^^

You MAD?

Opublikowano

Ale jest problem, w tym tempie się pogubiłem. :v

Gdzie ja mam to wkleić, mógłbym prosić o cały kod? ^^

 

Tę pętlę while w tym miejscu, gdzie ma zostać wypisana zawartość programu.

cin.good musi być w ifie, takim jak pokazałem w pierwszym poście, w niego wkładasz tą pętle.

 

Zamiast to:

ifstream abc;
abc.open("abc", ifstream::in);

Wstawiasz:

ifstream abc(nazwa.c_str());

Z resztą spróbuj się sam zastanowić nad tym, sporo ci podpowiedziałem :)


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

Dobra, jakoś poszło ale teraz zapisując coś do pliku wszystko jest złączone ze sobą, nic nie jest oddzielone, jak to zmienić?

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
string nazwa;
string pytanie1;
string pytanie2;
int ilosclinii;
int i=0;
pytanie1="Jaka jest nazwa pliku?";
pytanie2="Ile linii mam wprowadzic?";
cout << pytanie1 << endl;
cin >> nazwa;
cout << pytanie2 << endl;
cin >> ilosclinii;

fstream abcd; 

abcd.open ("abcd.txt" , ifstream::out);
string x;



{
    while( i < ilosclinii)
    {
        cout << "Wpisz linie:";
        cin >> x;




     abcd.write( & x[0], x.length() );

     i++; // zmienna i zwieksza siê
    }
}
fstream plik( "abcd.txt", ios::out );


return 0;
}

You MAD?

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...