sciezka do pliku z klawiatury

0

Chodzi o policzenie srednikow w pliku i scieżke do pliku mam podac z klawiatury, tylko niestety nie działa mi wpisywanie ściezki, prosze bardzo o pomoc.

#include<iostream>
#include<math.h>
#include<string>
#include<fstream>
using namespace std;


int main()
{
    fstream plik;
    string nazwa;
    cout<<"Podaj nazwe pliku: ";
    cin>>nazwa;
    plik.open(nazwa+=".txt",ios::in);
    char c;
    while(plik.get(c))
    {
        if(c==';')
            ile++;
    }
    cout<<ile;
    plik.close();
    return 0;
}
0

Może podaj jeszcze przykład wpisywania ścieżki do pliku.
Nie sprawdzasz czy plik w ogóle się otworzył.
Jeśli używasz standardu starszego niż C++11, to proponuje go włączyć w opcjach kompilatora. Przed tym standardem metoda open() przyjmuje cstringi, czyli trzeba użyć c_str().

0

dziękuje teraz działa, a mam jeszcze jedno pytanie jak to zmodyfikować aby sciezka do pliku zamiast w stringu to w tablicy char była?

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


int main()
{
    fstream plik;
    string nazwa;
    int ile=0;
    cout<<"Podaj nazwe pliku: ";
    cin>>nazwa;
    plik.open(nazwa.c_str(),ios::in);
    if(plik.good()==false)
    {
        cout<<"Plik nie istnieje";
        exit(0);
    }
    char c;
    while(plik.get(c))
    {
        if(c==';')
            ile++;
    }
    cout<<ile;
    plik.close();
    return 0;
}
0

jest bardzo wygodnie, ale dla własnej wiedzy chciałbym wiedzieć :)

0

Stwórz tablicę char buff[size] o odpowiedniej długości i użyj metody std::cin.getline() do pobrania danych od użytkownika.
Przykład w dokumentacji: http://www.cplusplus.com/reference/istream/basic_istream/getline/
Dynamicznego rozmiaru nie będę proponował, bo w C++ jest std::vector oraz std::string (w C trzeba byś poczytał o malloc).

0

dziękuje, mógłyś zerknąc czy modyfikacje przeprowadziłem dobrze?

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


int main()
{
    fstream plik;
    char nazwa[50];
    int ile=0;
    cout<<"Podaj nazwe pliku: ";
    cin.getline(nazwa,50);
    plik.open(nazwa,ios::in);
    if(plik.good()==false)
    {
        cout<<"Plik nie istnieje";
        exit(0);
    }
    char c;
    while(plik.get(c))
    {
        if(c==';')
            ile++;
    }
    cout<<ile;
    plik.close();
    return 0;
}
1

char nazwa[MAX_PATH];

0

czyli rozumiem ze zamiast 50 powinno byc 256 ?

0

To makro ma najczęściej wartość 260, ale tak nie musi być, więc jest bezpiecznie użyć, bo nie przekroczysz długości ścieżki do pliku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1