co jest nie tak w tej funkcji?

0

muszę stworzyć funkcję która pobiera z pliku txt planszę i wpisuje ją do tablicy.
Nie wiem dlaczego napisana przeze mnie funkcja nie działa :( Czy mogę poprosić o naprawienie jej i wyjaśnienie co było nie tak?
W wymaganiach jest że nie można używać cin/cout/printf/scanf oraz że ma to być raczej pisane w c, a nie w c++.

void litera_n(char **tab,) {
	FILE* in = fopen("proj.txt", "rt");
	char arr[144];

	if (in == NULL)
	{
		fprintf(stderr, "\nBlad otwarcia pliku dyskowego!\n");
		
	}
	else {
		while (feof(in) != 0)
		{
			fgets(arr, 144, in);


			for (int i = 0; i < 12; i++)
			{
				for (int j = 0; j < 12; j++) {
					tab[i][j] = arr[144];

					
				}
			}
			for (int i = 0; i < 12; i++)
			{
				for (int j = y; j < y + n; j++)
					putch(tab[i][j]);
			}
		}
	}
	fclose(in);
	getch();

}
0

dodałam jako txt :)

0

Co miałaś na myśli pisząc tab[i][j] = arr[144]???

0
koszalek-opalek napisał(a):

Co miałeś na myśli pisząc tab[i][j] = arr[144]???

chciałam stworzyć tablicę z tego co jest w tym pliku proj.txt,a są tam 144 znaki, a potem przepisać z tablicy arr[144] to tej mojej tab

0

To raczej tab[i][j] = arr[i*12+j] -- ale też nie pójdzie, bo powinnaś chyba wczytywać po linijce, skoro wiesz jaki jest rozmiar danych (ustalone to z góry?), to i while niepotrzebne...

0

W c++ jest coś takiego jak getline , możesz poszukać w tą stronę.

While jest potrzebny, bo masz pewność, że czyta do końca pliku.

Kiedyś napisałem taką funkcje(w c++), działa ona tak, że zczytuje do stringa cyfre, jeśli napotka coś innego niż cyfra to wrzuca utworzoną liczbę do macierzy.

void textToDec(std::string oneLine, int matrix[10][10], int column){

        const int len = oneLine.length(); //długoś jednej lini zczytanej z pliku
        std::string liczba = ""; //do tej zmiennej będziemy zapisywać liczbę
        int k = 0; // number wiersza.

        for(int i = 0; i < len;i++){

            if(oneLine.at(i) != '  '){
                //liczby w pliku były od siebie oddzielone spacjami, więc jeżeli nie napotkał w danym miejscu spacji (.at(i) , odnosi się do konkretnego miejsca w stringu) to wpisywał coś innego 
                niż spacja do naszej liczby

                liczba += oneLine.at(i);
                continue;
            }
            if(liczba.length() > 0){ //tutaj zabezpiecznie, że jeżeli długość zczytywanej wcześniej lioczby była by mniejsza niż zero to,  żeby program się nie wywalał.

            matrix[column][k] = stoi(liczba);

            k++; // zmiana wiersza.
            }

            liczba = ""; //a tutaj zmianna wartości, żeby nie dopisywało nam w stringu cyfr z nastęnej liczby
        }

        matrix[column][k] = stoi(liczba); // "stoi" czyli string to int, to chyba wiadomo
}
0
PanRiK napisał(a):

W c++ jest coś takiego jak getline , możesz poszukać w tą stronę.

While jest potrzebny, bo masz pewność, że czyta do końca pliku.

Kiedyś napisałem taką funkcje(w c++), działa ona tak, że zczytuje do stringa cyfre, jeśli napotka coś innego niż cyfra to wrzuca utworzoną liczbę do macierzy.

void textToDec(std::string oneLine, int matrix[10][10], int column){

        const int len = oneLine.length(); //długoś jednej lini zczytanej z pliku
        std::string liczba = ""; //do tej zmiennej będziemy zapisywać liczbę
        int k = 0; // number wiersza.

        for(int i = 0; i < len;i++){

            if(oneLine.at(i) != '  '){
//liczby w pliku były od siebie oddzielone spacjami, więc jeżeli nie napotkał w danym miejscu spacji (.at(i) , odnosi się do konkretnego miejsca w stringu) to wpisywał coś innego niż spacja do naszej liczby

                liczba += oneLine.at(i);
                continue;
            }
            if(liczba.length() > 0){

            matrix[column][k] = stoi(liczba);

            k++;
            }

            liczba = "";
        }

        matrix[column][k] = stoi(liczba);
}

niestety getlina nie mogę użyć :( mamy zakaz używania standardowych bibliotek c++ , a tutaj musiałabym dać <string>, ale zaraz przeanalizuję twój kod i może coś z tego wyjdzie ;)

0
dzwoneczek napisał(a):

niestety getlina nie mogę użyć :( mamy zakaz używania standardowych bibliotek c++ , a tutaj musiałabym dać <string>, ale zaraz przeanalizuję twój kod i może coś z tego wyjdzie ;)

Zamiast stringa robisz tablice charów :)

Plus, chodziło mi o to, że jest "coś takiego jak getline w c++" , a nie że masz go użyć, poszukaj jak to się robi w C.

Edit. Plus wczytywanie linia po linii jest dużo bardziej praktyczne, polecam spróbować to zamiast for`ów.

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