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

program wykrzacza się podczas próby odczytu z pliku

0 głosów
1,214 wizyt
pytanie zadane 3 czerwca 2018 w C i C++ przez mario5551 Użytkownik (550 p.)

Witam czy może mi ktoś wyjaśnić dlaczego ten kod mi się wykrzacza?

#include "iostream"
#include "fstream"
#include "string"
#include "cstdlib"
using namespace std;


int main()
{
	fstream sygnaly;
	sygnaly.open("sygnaly.txt", ios::in);

	if (sygnaly.good() == false)
	{
		cout << "plik nie istnieje";
		exit(0);
	}

	string slowo[1000];

	int i = 0;
	while (!sygnaly.eof())
	{
		getline(sygnaly, slowo[i]);
		i++;
	}
    return 0;
}

 

komentarz 3 czerwca 2018 przez niezalogowany
Ile jest linii w pliku?
komentarz 3 czerwca 2018 przez mario5551 Użytkownik (550 p.)
1000 wierszy, tak w ogóle to zadanie z tegorocznej matury z informatyki zad 4
komentarz 3 czerwca 2018 przez niezalogowany

Pobrałem plik i nie mam problemów. Stwórz nowy projekt, wklej kod. Pobierz jeszcze raz plik (może przypadkiem dodałeś coś). Ewentualnie przy komunikacie o zaprzestaniu działania powinieneś mieć opcję debuguj. Powinno to wypisać z czym jest problem przykład:

Zgłoszono nieobsługiwany wyjątek: naruszenie dostępu do zapisu.
komentarz 3 czerwca 2018 przez mario5551 Użytkownik (550 p.)

Zrobiłem tak jak radziłeś czyli pobrałem wszystko jeszcze raz i stworzyłem nowy projekt i to samo, włączyłem debugowanie i...

Zgłoszono wyjątek: naruszenie dostępu do zapisu. **_Left** było 0xCCCCCCCC.

3 odpowiedzi

0 głosów
odpowiedź 3 czerwca 2018 przez j23 Mędrzec (195,220 p.)
wybrane 4 czerwca 2018 przez mario5551
 
Najlepsza

Zamień pętlę z linii 22 na:

while (i < 1000 && getline(sygnaly, slowo[i])) { ++i; }

 

komentarz 4 czerwca 2018 przez mario5551 Użytkownik (550 p.)

faktycznie zadziałało :-) dzięki. Dopisałem resztę zadania i nie wygląda to różowo.... Też wywala mi program po uruchomieniu. 

#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "string"


using namespace std;


void zad1(string slowo[])
{
	for (int i = 40; i <= 1000; i = i + 40)
	{
		cout << slowo[i][9];
	}
}

void zad2(string slowo[])
{

	int n, a, b, c;
	a = b = c = 0;
	string d;


	for (int i = 0; i < 1000; i++)
	{
		n = slowo[i].length();

		for (int j = 0; j < n; j++) // sprawdzanie powtarzalniści danej litery w słowie
		{
			for (int k = 0; k < n; k++)
			{
				if (slowo[i][j] != slowo[i][k])
				{
					a++;
					if (a > b) b = a;
				}

			}
		}

		if (b > c)//słowo które ma najwięcej niepowtarzających się liter
		{
			c = b;
			d = slowo[i];
		}
	}

	cout << d;
}

void zad3(string slowo[])
{
	int n;
	bool a;
	char *tab;


	for (int i = 0; i < 1000; i++)
	{
		n = slowo[i].length();
		tab = new char[n];

		for (int h = 0; h < n; h++) //przepisanie słowa do tablicy znaków
			tab[h] = slowo[i][h];

		for (int j = 0; j < n; j++)
		{
			for (int k = 0; k < n; k++)
			{
				if ((tab[j] - tab[k] <= 10) || (tab[j] - tab[k] >= -10))
					a = true;
				else
				{
					a = false;
					break;
				}
			}
			if (a == false) break;
		}
		if (a == true) cout << slowo[i];
	}
}

int main()
{
	fstream sygnaly;
	sygnaly.open("sygnaly.txt", ios::in);

	if (sygnaly.good() == false)
	{
		cout << "plik nie istnieje";
	}

	string slowo[1000];

	int i = 0;
	while ((i < 1000) && (getline(sygnaly, slowo[i]))) { ++i; }

	
	zad1(slowo);
	zad2(slowo);
	zad3(slowo);
	
	return 0;
}

 

komentarz 4 czerwca 2018 przez j23 Mędrzec (195,220 p.)

for (int i = 40; i <= 1000; i = i + 40)

Indeks tablicy slowo nie może być równy 1000.

komentarz 4 czerwca 2018 przez mario5551 Użytkownik (550 p.)
czemu nie? 25*40=1000
komentarz 4 czerwca 2018 przez mario5551 Użytkownik (550 p.)

A już kumam ale ze mnie gafa blush

0 głosów
odpowiedź 3 czerwca 2018 przez Secrus Nałogowiec (32,880 p.)
Napisz na czym się wykrzacza, jakie błędy wyrzuca.

Jedyne co widzę to biblioteki w "" zamiast <>... Może to to?
komentarz 3 czerwca 2018 przez mario5551 Użytkownik (550 p.)

i tak za każdym razem a jeśli chodzi o "" to można ich używać zamiennie z <> tak jak w VS

program przestał działać

0 głosów
odpowiedź 3 czerwca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
Skoro wiesz, że masz wczytać 1000 wierszy, to wczytaj dane w pętli, która się wykonuje 1000 razy. Teraz wystarczy, że będzie pusta linia za ostatnim wierszem i może nastąpić crash programu.

Podobne pytania

+1 głos
2 odpowiedzi 1,121 wizyt
pytanie zadane 25 września 2021 w C i C++ przez DeniS1 Początkujący (410 p.)
+1 głos
0 odpowiedzi 388 wizyt
pytanie zadane 10 października 2021 w PHP przez XxThorusxX Użytkownik (500 p.)
0 głosów
0 odpowiedzi 478 wizyt

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 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.

...