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

Czmu wywala mi program?

0 głosów
385 wizyt
pytanie zadane 18 lutego 2016 w C i C++ przez Daaa22 Dyskutant (8,250 p.)

Napisałem coś takiego:

#include <iostream>
#include <fstream>

int SeeFile(std::string name,int line)
{
    std::fstream file;
    std::string iss[line];
    int asd=1;
    int buf;
    file.open(name.c_str(), std::ios::in | std::ios::out);
    if(file.good()==false)return 5;
    for(int i=line; i>0; i--)
    {
        getline(file, iss[asd]);
        asd++;
    }
    buf=asd;
    for(int j=asd; j>0; j--)
    {
        std::cout << iss[buf-j+2] << std::endl;
    }
    return 0;
}

int main()
{
    SeeFile("Nic.txt", 10);
    return 0;
}

ale potem zauważyłem, że nie działa(wywala program bez powodu.) Dla ułatwienia napisałem komentarze, aby łatwiej wam było mi pomóc

 

#include <iostream>
#include <fstream>

int SeeFile(std::string name/** Nazwa pliku*/,int line/**Ile linii wczytac*/)
{
    std::fstream file;/** Plik*/
    std::string iss[line];/**Napis z linii*/
    int asd=1;/**Numer linii z napisem*/
    int buf;/**Potrzeba zapamietac te wartosc (parz linia 20)*/
    file.open(name.c_str(), std::ios::in | std::ios::out);/**Otwieranie pliku*/
    if(file.good()==false)return 5;/**Sprawdzanie czy plik istnieje*/
    for(int i=line; i>0; i--)/**Petla wczytujaca linie (od int line(patrz 4 linijka))*/
    {
        getline(file, iss[asd]);/**Wczytywanie napisu*/
        asd++;/**Kolejna linijka*/
    }
    buf=asd;/**Potrzebne do tablicy(patrz 20 linijka)*/
    for(int j=asd; j>0; j--)/** Petla wypisujaca liczby*/
    {
        std::cout << iss[buf-j+2] << std::endl;/**tu wypisuja sie liczby*/
    }
    return 0;/**Konczenie funkcji*/
}

int main() /**Tu sie wszystko dzieje*/
{
    SeeFile("Nic.txt", 10);/** wywolywanie funkcji*/
    return 0; /** Konczenie programu*/
}

Czemu mnie wywala zamiast wypisać te 10 linijek?

PS. zawartość pliku to:

 

Lubie
Placki
1
2
3
4
5
6
7
Nie ma 8 :(

2 odpowiedzi

+2 głosów
odpowiedź 18 lutego 2016 przez Uczen Użytkownik (600 p.)
wybrane 18 lutego 2016 przez Daaa22
 
Najlepsza
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stdio.h>
#include <windows.h>


using namespace std;

int main()
{

    fstream plik;

    plik.open("dane.txt", ios::in);

    if(plik.good()==false)
    {
        cerr<<"Nie ma pliku!";
        return 0;
    }

    int x=1;
    string y;

    while(getline(plik,y))
    {
    x++;
    }
    plik.close();

    plik.open("dane.txt", ios::in);

    string linia;
    string tresc[x];
    int nr_linii=0;
    while(getline(plik, linia))
    {
    tresc[nr_linii]=linia;
    nr_linii++;
    }
    //nr_linii--;

    cin>>x;
    if(x>nr_linii)
    {
        cerr<<"Nie ma tyle linii";
        return 0;
    }
    for(int i=0;i<=x;i++)
    {
      cout<<tresc[i]<<endl;

    }

   plik.close();

   getchar();



    return 0;

}

Chodzi o cos takiego?

komentarz 18 lutego 2016 przez Daaa22 Dyskutant (8,250 p.)

Tak, dokładnie to. Tylko tam masz błąd w pętli

for(int i=0;i<=x;i++)
    {
      cout<<tresc[i]<<endl;
 
    }

a powinno być

for(int i=0;i<x;i++)
    {
      cout<<tresc[i]<<endl;
 
    }

 

+1 głos
odpowiedź 18 lutego 2016 przez niezalogowany
Co rozumiesz przez wyrażenie "wywala", btw twój kod jest strasznie nieczytelny i moim zdaniem jest niepotrzebnie skomplikowany, jeżeli chodzi o wczytywanie kompletnych linii to da się to załatwić o wiele czytelniej.
komentarz 18 lutego 2016 przez Daaa22 Dyskutant (8,250 p.)
Dasz przykład kodu, który działa tak samo?

PS. Czemu nie czytelny?
komentarz 18 lutego 2016 przez niezalogowany
Jeżeli będzie działał tak samo to też nie będzie działał, raczej chodzi ci o program, który realizuje określone zadanie (wnioskując po nazwie funkcji to ma wyświetlić zawartość pliku, z czego maksymalnie określoną ilość linii? Coś w rodzaju head z Linuxa?
komentarz 18 lutego 2016 przez Daaa22 Dyskutant (8,250 p.)

Tak, piszesz nazwie pliku (SeeFile(Nazwa, ile linii)), a potem ile linii odczytać (SeeFile(Nazwa, ile linii)). Taka magia :)

Podobne pytania

0 głosów
1 odpowiedź 813 wizyt
pytanie zadane 29 grudnia 2015 w C i C++ przez martix3 Użytkownik (690 p.)
+1 głos
2 odpowiedzi 742 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez Yari27 Początkujący (410 p.)
0 głosów
2 odpowiedzi 1,578 wizyt

93,720 zapytań

142,641 odpowiedzi

323,264 komentarzy

63,268 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...