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

Czmu wywala mi program?

Object Storage Arubacloud
0 głosów
203 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ź 439 wizyt
pytanie zadane 29 grudnia 2015 w C i C++ przez martix3 Użytkownik (690 p.)
+1 głos
2 odpowiedzi 464 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez Yari27 Początkujący (410 p.)
0 głosów
2 odpowiedzi 833 wizyt

92,555 zapytań

141,404 odpowiedzi

319,558 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...