• 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();

0 głosów
80 wizyt
pytanie zadane 8 stycznia 2018 w C i C++ przez Artur313 Użytkownik (750 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 (159,060 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ź 164 wizyt
0 głosów
1 odpowiedź 78 wizyt
pytanie zadane 7 czerwca 2018 w C i C++ przez Alan Kruszyński Obywatel (1,200 p.)
+1 głos
3 odpowiedzi 96 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

66,364 zapytań

113,102 odpowiedzi

239,386 komentarzy

46,621 pasjonatów

Przeglądających: 313
Pasjonatów: 18 Gości: 295

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...