• 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

Object Storage Arubacloud
0 głosów
688 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 (194,920 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 (194,920 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 536 wizyt
pytanie zadane 25 września 2021 w C i C++ przez DeniS1 Początkujący (410 p.)
+1 głos
0 odpowiedzi 122 wizyt
pytanie zadane 10 października 2021 w PHP przez XxThorusxX Użytkownik (500 p.)
0 głosów
0 odpowiedzi 353 wizyt

92,622 zapytań

141,477 odpowiedzi

319,818 komentarzy

62,005 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!

...