• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

int w nazwie pliku przy wykorzystaniu funkcji .open();

Aruba Cloud - Virtual Private Server VPS
0 głosów
219 wizyt
pytanie zadane 8 stycznia 2018 w C i C++ przez Artur313 Użytkownik (790 p.)
edycja 10 stycznia 2018 przez Artur313

witam mam pytanie czy można dopisać wartość zmiennej int do nazwy pliku tekstowego w funkcji .open(); 

np:



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


int main(int argc, char** argv) {
int c;
cout <<"podaj numer pytania ";
cin>>c;
    ifstream plik;
    plik.open("1.txt");
    if (plik)
    {
        string linia;
        while(getline(plik,linia))
        {
            cout <<linia;
        }


    }
    else
    {
        cout <<"nie mozna otworzyc pliku ";
    }

    return 0;
}

 

zamiast 1 wkleić to co poda użytkownik ? Jeśli tak to w jaki sposób?

 

EDIT: 

udało mi się zrobić coś takiego :

 

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <sstream>


using namespace std;

int main()
{
    cout << "podaj numer pytania " << endl;
    int l;
    cin>>l;

string numer;
stringstream strumien;
strumien<<l;
strumien >>numer;

    ifstream plik;
    plik.open(numer+".txt");
    if(plik)
    {
        string linia;
        while(getline(plik,linia))
        {
            cout<<linia;
        }

    }
    else
    {
        cout <<"wystapil blad nie mozna otworzyc pliku";
    }
    plik.close();
    return 0;
}

i o ile sama konwersja działa to konkatenacja nie i wyświetla mi błąd ktoś wie co jest nie tak?

komentarz 8 stycznia 2018 przez k3ybo4rd Obywatel (1,180 p.)
Musisz przekonwertować liczbę całkowitą na jej odpowiednik znakowy

i konkatenować napis i liczbę https://stackoverflow.com/questions/5590381/easiest-way-to-convert-int-to-string-in-c

 

Tu dokładniej jest pokazane

http://www.cplusplus.com/reference/string/to_string/

2 odpowiedzi

+4 głosów
odpowiedź 8 stycznia 2018 przez niezalogowany

Za pomocą std::to_string i konkatenacji:

plik.open(std::to_string(c) + ".txt");
+1 głos
odpowiedź 8 stycznia 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
int number = 12;
std::string filename = std::string("plik") + std::to_string(number);
std::ifstream file (filename); //zamiast metody open, można użyć konstruktora

Przedstawione przeze mnie rozwiązanie wymaga użycia standardu C++11 (opcja w stylu -std=c++11 w kompilatorze, lub ustawienie takiej opcji w IDE).

Oczywiście jeśli nie chcesz, to nie musisz pobierać od użytkownika numeru w postaci liczby całkowitej, możesz tę wartość przechowywać w postaci tekstowej i wtedy std::to_string() nie będzie potrzebne.

Aha, gdybyś miał jakiś problem, to starsze wersje MinGW mają jakiegoś buga, z tego co mi wiadomo trzeba po prostu wgrać nowszą.

Podobne pytania

0 głosów
1 odpowiedź 509 wizyt
pytanie zadane 9 marca 2016 w PHP przez Filip2248 Dyskutant (8,840 p.)
0 głosów
1 odpowiedź 430 wizyt
pytanie zadane 7 czerwca 2018 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)
+1 głos
3 odpowiedzi 807 wizyt

93,327 zapytań

142,323 odpowiedzi

322,396 komentarzy

62,656 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...