[c]nowy wiersz, główna funkcja, linux

madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: madaf007 »

Mam do napisania program, który justuje tekst, ale najpierw chcę krok po kroczku napisać i opanować funkcje, który w mniejszym lub większym stopniu przydadzą mi się do ostatecznego programu. Najpierw mój program ma za zadanie zrobić nowy wiersz w tekście, tj jeśli tekst ma dlugosc np. 40 znaków i jest on w jednym wierszu, to po wykonaniu komendy ./nowy 10 <tekst.txt> wynik.txt tekst zawarty w pliku tekst.txt zrobi '\n' po 10-tym znaku, jeśli tam jest spacja. Jeśli nie ma tam spacji, to cofnie się o kilka znaków aż znajdzie spację i tam wstawi '\n'.
Początkowy mój kod wygląda tak:

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 100


void nowy_wiersz(char zdanie[], int miejsce)
{
       int i;
       int j;

       for(i=0;zdanie[i]=zdanie[miejsce];i++)
       {
         if(zdanie[miejsce]!=' '){
                                 miejsce=j;
                                 while(zdanie[j]=' '){
                                            zdanie[j]='\n';
                                               --j;
                                                     }
                                  }else{
                                     zdanie[miejsce]='\n';
                                       }
       }
}
 
I mam problem z funkcją main.

Kod: Zaznacz cały

int main()
{

   char zdanie[MAX];
   int miejsce;

   scanf("%c", zdanie);
   nowy_wiersz(zdanie,miejsce);
 return 0;
}
 
Który na pewno jest zły, bo po prostu nie działa. Program się kompiluje, ale po wpisaniu tej komendy co napisałem wcześniej wyskakuje "Naruszenie ochrony pamięci". Jak main powinien być napisany? Głowie się i głowie i nie mogę na to wpaść. No i przez to nie mogę sprawdzić, czy funkcja "nowy_wiersz" jest poprawnie napisana, a pewnie nie jest:) Proszę o pomoc.
Ostatnio zmieniony 21 mar 2010, o 14:53 przez Althorion, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości - dodałem coś w stylu kolorowania składni.
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: Sokół »

Hmm może zacznijmy od tego, że masz operator przypisania = zamiast operatora porównania == w funkcji nowy wiersz.
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: madaf007 »

faktycznie. poprawiłem. Jeszcze w main dałem scanf("%d",&miejsce);
nowy_wiersz wyglada teraz tak:

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 100


void nowy_wiersz(char zdanie[], int miejsce)
{
       int i;
       int j;
       miejsce=miejsce+1;

       for(i=0;zdanie[i]==zdanie[miejsce];i++)
       {
         if(zdanie[miejsce]!=' '){
                                 miejsce=j;
                                 while(zdanie[j]==' '){
                                            zdanie[j]=='\n';
                                               --j;
                                                     }
                                  }else{
                                     zdanie[miejsce]=='\n';
                                       }
       }
}
 
Ale po wpisaniu ./nowy_wiersz 10 <teskt.txt> wynik.txt w pliku wynik.txt nic nie wybija. Potrzebna jest jeszcze jakaś może funkcja by przekazała wynik do tamtego pliku?
Ostatnio zmieniony 21 mar 2010, o 14:54 przez Althorion, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości - dodałem coś w stylu kolorowania składni.
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: Sokół »

W programie jest trochę błędów, jak coś nie działa to debugguj w wygodnym środowisku albo staraj się testować kod partiami. Screen ->
Łatwo się było przekonać, że program wczytuje tylko pierwszy znak z wprowadzonej frazy. Powód?
scanf("%c", zdanie); wczytuje JEDEN znak. Zmień to na: scanf("%s", zdanie). Przy wczytywaniu scanf napotkanie całego zdania, oznacza wczytanie ciągu znaków do spacji (jeden wyraz). W c++ można użyć getline() do pobrania całego wiersza (aż do napotkania znaku końca linii). Nie wiem czy jest w odpowiednik C, ale na piechotę można by jakoś przez getchar() i while osiągnąć ten efekt).

Inna sprawa, że scanf odnosi się do danych wprowadzanych w konsoli, żeby wygodnie czytać i zapisywać pliki (to co Ty potrzebujesz), to trzeba skorzystać z innych funkcji.

-- niedziela, 14 marca 2010, 10:58 --

I zwróć uwagę na warunek w pętli for. Pętla for działa, dopóki warunek jest prawdziwy. Znak pierwszy w zdaniu zwykle nie będzie identyczny ze znakiem na zdanie[miejsce], czyli pętla nie wykona się ani razu.

-- niedziela, 14 marca 2010, 11:04 --

W zasadzie tam nie powinno być ani przypisania, ani porównania. Napisz warunek for(i=0; i< miejsce; i++)
i sprawdzaj za każdym razem czy zdanie jest spacją, jeśli tak to zapamiętuj adres. Po przebiegu for'a będziesz wiedział gdzie była ostatnia spacja i tam wstaw znak nowej linii. Nie wiem jakiego działania oczekujesz, jeśli spacji nie ma w ogóle w znakach od 0, aż do miejsce, ale jak wymyślisz to zmodyfikuj odpowiednio kod, żeby sprawdzał np. całe zdanie
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: madaf007 »

Sokół pisze: W zasadzie tam nie powinno być ani przypisania, ani porównania. Napisz warunek for(i=0; i< miejsce; i++)
i sprawdzaj za każdym razem czy zdanie jest spacją, jeśli tak to zapamiętuj adres. Po przebiegu for'a będziesz wiedział gdzie była ostatnia spacja i tam wstaw znak nowej linii. Nie wiem jakiego działania oczekujesz, jeśli spacji nie ma w ogóle w znakach od 0, aż do miejsce, ale jak wymyślisz to zmodyfikuj odpowiednio kod, żeby sprawdzał np. całe zdanie


Byłbym wdzięczny za wytłumaczenie jak mogę zapamiętać adresy tych spacji. Zapewne przez wskaźniki, tylko jak to zapisać, aby program potem zapamiętywał tą ostatnią spację. I jeszcze jeśli chodzi o debuggera na linuxie, to trzeba go instalować, czy on jest w kompilatorze gcc i po prostu za pomocą komend się nim posługiwać?
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: Sokół »

Nie trzeba wskaźników, zdefiniuj zmienną SpacePos czy jak tam chcesz ją nazwać, przed pętlą, powiedzmy inicjując ją wartością -1. Będzie ona dostępna w całej funkcji nowy_wiersz, także w pęli . Dalej w pętli for sprawdzasz czy i-ty znak jest spacją, jeśli tak, to dokonujesz zmiany wartości: SpacePos=i. Po ostatnim przebiegu pętli zmienna SpacePos będzie zawierała miejsce ostatniej spacji, albo wartość -1, co oznaczać, będzie, że spacji nie ma w ogóle (takie zabezpieczenie).


Z kompilatorami gcc dobrze współpracuje gdb (GNU Debugger), nie wiem czy jest domyślnie instalowany, zobacz czy masz takie paczki, a jak nie to odsyłam do repozytoriów. GDB działa w trybie konsolowym, także warto zadbać o odpowiednie IDE, czy inne narzędzia które będą wizualizować to co gdb potworzy (co nie jest konieczne, ale okienka są wygodne )
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: madaf007 »

Dzięki wielkie. Na razie tamten program zostawiłem skupiając się na programie, który z jednego pliku txt wynik wpisze do drugiego pliku. Starałem się napisać prosty program, który usuwa znaki nowego wiersza i wstawia za nie spację. Oto co udało mi się stworzyć:

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 1000

void usun(char zdanie[])
{
    int i;
    char znak = '\n';
    int dlugosc = strlen(zdanie);

    for(i=0;i<dlugosc-1;i++)
         if(zdanie[i]==znak){
               znak=' ';
               zdanie[i]=znak;
         }
}

void getline(char zdanie[], int lim)
{
   int c,i;

   for(i = 0;i<lim-1 && (c=getchar())!=EOF;i++)
      zdanie[i]=c;
      zdanie[i]='\0';
}

void copy(char to[], char from[])
{

  int i;
  i=0;
  while((to[i] = from [i])!='\0')
    ++i;
}

int main()
{
    char zdanie[MAX];
    char zdanie2[MAX];

    getline(zdanie,MAX);
    usun(zdanie);
    copy(zdanie2,zdanie);
    printf("%s",zdanie2);
    return 0;
}
 
Standardowo nie działa tak jak powinno. Usuwa tylko pierwszy napotkany znak nowego wiersza. Dalej nie drga. Nie mam wątpliwości, że w funkcji "usun" jest jakiś błąd w pętli, ale nie moge tego znaleźć. Zainstalowałem debuggera dbg, ale nie mam pojęcia jak z tego korzystać. Środowisko graficzne mam KDE. Nie mogę znaleźć nigdzie jak korzystać z tego debuggera, tak aby wytłumaczyć jak chłop krowie na rowie. Jedynie co konkretniejszego znalazłem to to . Muszę w kodzie dać znać, że debugger ma to analizować? Czy to ja źle rozumiem?
Ostatnio zmieniony 21 mar 2010, o 14:54 przez Althorion, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości - dodałem coś w stylu kolorowania składni.
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: Sokół »

hmmm tak szybki rzut okiem na funkcję usuń:

Kod: Zaznacz cały

void usun(char zdanie[])
{
    int i;
    char znak = '\n';
    int dlugosc = strlen(zdanie);

    for(i=0;i<dlugosc-1;i++)
         if(zdanie[i]==znak){
               znak=' ';
               zdanie[i]=znak;
         }
} 
masz jedną zmienną znak, która przechowuje najpierw znak nowej linii. W pętli sprawdzasz kolejne znaki zdania i jeśli któryś jest nową linię, to zmienną znak nadpisujesz nową wartością, spacją. W rezultacie kolejny enter nie zostanie wykryty.

zamiast:

Kod: Zaznacz cały

  if(zdanie[i]==znak){
               znak=' ';
               zdanie[i]=znak;
         } 
napisz

Kod: Zaznacz cały

  if(zdanie[i]==znak){
               zdanie[i]=' '; // lub przez znak ascii - zdanie[i]=32;
         }
 
to tak na szybko, bo już późno - zajrzyj jutro popołudniu do tego tematu, jak coś znajdę to dopiszę. A propos debugera - program pomaga w wykrywaniu błędów, możesz wykonywać program linijka po linijce i na bieżąco śledzić jaka zmienna ma jaką wartość. Linuksa bardzo rzadko używam, jednak pamiętam, że pod KDE całkiem przyjemnym IDE było Kdevelop, ma chyba graficzny debuger (nie wiem czy autorski od kdevelop czy GUI na gdb). Poszperaj w google 'kdevelop debugger" albo spytaj na jakimś forum linuksowym w czym się teraz kodzi ;)
Ostatnio zmieniony 21 mar 2010, o 14:55 przez Althorion, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości - dodałem coś w stylu kolorowania składni.
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: madaf007 »

Dziękuje:) Zadziałało. Teraz pomyśle z tym co chciałem wcześniej zrobić, czyli znakami nowego wiersza w określonym miejscu. Postaram się zastosować Twoje wcześniejsze wskazówki. Jak będę miał jakieś problemy to dam znać.

-- 20 marca 2010, 15:48 --

Przepraszam, że nie edytuje, ale chciałbym odświeżyć temat. Otóż chciałbym teraz po usunięciu znaku nowego wiersza wstawić je ponownie, ale już w określonym miejscu przez użytkownika. Czyli wpisując komendę ./program 10 <text.txt> wynik.txt program zrobi entery co 10 znaków. Na razie chcę normalnie wstawiać tam '\n' bez sprawdzania czy tam jest spacja, ponieważ chcę aby program reagował na to ./program 10 <text.txt> wynik.txt a na razie coś mi nie wychodzi. To co nie działa wygląda tak:

Kod: Zaznacz cały



void newline(char zdanie[], int miejsce)
{
    int i;

    int dlugosc = strlen(zdanie);
    for(i=0;i<dlugosc;i=i+miejsce){
         zdanie[i]='\n';

                    }
}

 
oraz main:

Kod: Zaznacz cały

int main()
{
    char zdanie[MAX];
    char zdanie2[MAX];
    int miejsce;
    getline(zdanie,MAX);
    usun(zdanie);
    scanf("%d",&miejsce);
    newline(zdanie,miejsce);
    copy(zdanie2,zdanie);
    printf("%s",zdanie2);
    return 0;
}

 
No ale po wpisaniu tego co napisałem wcześniej wyskakuje Naruszenie Ochrony Pamięci. (Debuggera jeszcze nie mam)

-- 20 marca 2010, 19:20 --

EDIT: Już mam debugger i nic nie wykrywa
Ostatnio zmieniony 21 mar 2010, o 14:55 przez Althorion, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości - dodałem coś w stylu kolorowania składni.
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: Sokół »

Nie zapomniałeś o define?

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 1000

void usun(char zdanie[])
{
    int i;
    char znak = '\n';
    int dlugosc = strlen(zdanie);

    for (i=0;i<dlugosc-1;i++)
        if (zdanie[i]==znak)
        {
            zdanie[i]=' '; // lub przez znak ascii - zdanie[i]=32;
        }
}


void getline(char zdanie[], int lim)
{
    int c,i;

    for (i = 0;i<lim-1 && (c=getchar())!=EOF;i++)
        zdanie[i]=c;
    zdanie[i]='\0';
}

void copy(char to[], char from[])
{

    int i;
    i=0;
    while ((to[i] = from [i])!='\0')
        ++i;
}
void newline(char zdanie[], int miejsce)
{
    int i;

    int dlugosc = strlen(zdanie);
    for (i=0;i<dlugosc;i=i+miejsce)
    {
        zdanie[i]='\n';

    }
}

int main()
{
    char zdanie[MAX];
    char zdanie2[MAX];
    int miejsce;
    getline(zdanie,MAX);
    printf("%s","Pobrano zdanie \n \n \n");
    usun(zdanie);
    printf("%s","Rezultat funkcji usun: \n");
    printf("%s",zdanie);

    printf("%s"," \n \n \n podaj miejsce na ktorego wielokrotnosci ma byc enter: \n");
    scanf("%d",&miejsce);

    newline(zdanie,miejsce);

    printf("%s","\n\nrezultat funkcji newline: \n");
    copy(zdanie2,zdanie);
    printf("%s",zdanie2);
    return 0;
}
 
Dodałem dla celów sprawdzenia błędu parę linii z wyświetlaniem postępów. Efekt jest taki:


Tekstu nie wczytywałem z pliku tylko wpisałem z klawiatury, znak EOF w konsoli Windows osiąga się przez ctrl+z, w linuksie bodajże ctrl+d.
Ostatnio zmieniony 21 mar 2010, o 14:53 przez Althorion, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości - dodałem coś w stylu kolorowania składni.
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: madaf007 »

Dzięki wielkie. Define cały czas było. Czyli z moim programem ogólnie było w porządku. Przed chwilą właśnie znalazłem takie cudo jak argc i argv[], dzięki którym ta komenda działa co napisałem wyżej:)

Teraz kiedy już prawie wszystko wiem, staram się zrobić te znaki nowej linii tylko na odpowiednich spacjach. czyli leci pętla i w miejscu, w którym chcę wstawiam '\n', ale tylko jeśli tam jest spacja. Jeśli nie to cofa się do ostatnio napotkanej spacji. Jeśli spacji nie było żadnej, bo np. jakis wyraz jest dłuższy od wiersza, to niech ten wyraz utnie, bądź najlepiej wstawi '-'. Ale na razie chciałbym się skupić bez tego. Czytałem Twój wcześniejszy sposób, rozumiem go, ale coś nie mogę przenieść to na kod:

Kod: Zaznacz cały

int newline(char zdanie[], int miejsce)
{ 

      int i;
      space=-1;
      int dlugosc=strlen(zdanie);
      for(i=0;i<dlugosc;i++)
           if(zdanie[i]==' ')
                  space=i;
 
nie wiem co dalej. Próbowałem już na różne sposoby, żaden mi nie działa.
Ostatnio zmieniony 21 mar 2010, o 14:55 przez Althorion, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości - dodałem coś w stylu kolorowania składni.
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: Sokół »

Jeśli cały tekst ma być podzielony na wersy, tzn. enter ma być po każdej całkowitej wielokrotności 'miejsce', to tamten sposób w obecnej formie nie przejdzie, bo znajduje tylko ostatnią spację w całym tekście.

Sposób na rozwiązanie problemu może być kilka, zależy jednak czego oczekujesz obecnie od specyficznego źródła danych, np. co z parametrem miejsce=10 dla tekstu:

Kod: Zaznacz cały

a bcdefghijkllllll llasdaer
?
na 10 miejscu nie ma spacji, cofa się do pierwszej napotkanej, czyli do drugiego znaku.
Wstawia enter, efekt:

Kod: Zaznacz cały

a 
bcdefghijkllllll ll

A teraz gdzie ma być następny znak nowej linii, 10 znaków po poprzednim (lub wcześniej jeśli nie ma tam spacji), czy na 2*miejsce (20 znak)?

Może warto byłoby już pomyśleć nad końcowym efektem, z tym przenoszeniem czy ucinaniem, jeśli dużo trzeba będzie zmieniać.

Jednak sposoby są takie (w pseudokodzie):.
1.
leci znak po znaku od początku

Kod: Zaznacz cały

i=0
spacja=-1
miejsce= jakas wartosc;
for(i=0; i< długość_stringu; i++)
{
 if(zdanie[i]==' ') spacja=i;
 if((i % miejsce)==0 && zdanie[i]!=10)      // kod znaku nowej linii w ascii to 10. Można też:  zdanie[i]!='\n'
  {
       zdanie[i]=32
  }

} 
% to modulo, reszta z dzielenia. W skrócie pętla leci po stringu, wyłapując spacje, a kiedy natrafi na wielokrotność 'miejsce', to wstawia enter w ostatniej spacji (pod warunkiem, że już tam entera nie wstawiono).

2. sposób

Kod: Zaznacz cały

x=(dlugosc_stringu/miejsce)+1         // x - Na ile całkowitych porcji o długości "miejsce" można pociąć tekst
for(i=0; i<x; x++)                    // iteruje po każdej takiej porcji o długości "miejsce"
{
 spacja = -1;
 for(j=i*miejsce, j< (i+1)*miejsce; j++)   // iteruje po wszystkich znakach w danej porcji
  {
    if(zdanie[i]==' ')  spacja=i;
  }
  ... // ciag instrukcji zwiazanych ze wstawianiem znaku nowej linii. 
      // W zmiennej 'spacja' jest pozycja ostatniej spacji, bądź -1, 
      //jeśli w danej porcji o długości "miejsce" spacji nie wykryto.
}
 

3. sposób, opisowo: możesz sprawdzać string od tyłu, znak po znaku, w ten sposób unikniesz cofania - jeśli nie będzie spacji na zadanej n-tej pozycji od końca, to i tak sprawdzasz (n+1)-tą pozycję, aż do początku.
Ostatnio zmieniony 21 mar 2010, o 16:39 przez Szemek, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości - dodałem coś w stylu kolorowania składni.
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: madaf007 »

Na razie sprawdziłem pierwszy sposób. I coś niestety nie gra, bo nie zapamiętuje adresu ostatniej spacji. Daje znaki nowego wiersza jeśli tylko modulo z dzielenia wynosi 0 czyli zamienia po prostu napotkane w tym miejscu literki na znak '\n', uwzględniając jedynie czy tam nie jest już czasem znak nowego wiersza. Ciągle próbuje to rozgryźć.
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: Sokół »

Nic dziwnego, tam jest błąd:

Kod: Zaznacz cały

zdanie[i]=32
powoduje, że akurat w tym miejscu wstawi enter. Zamiast tego spróbuj:

Kod: Zaznacz cały

zdanie[spacja]=32
Wtedy znak nowej linii wstawi w miejsce tej ostatniej napotkanej spacji.

MYŚLEĆ NAD KODEM!
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

[c]nowy wiersz, główna funkcja, linux

Post autor: madaf007 »

już tak robiłem, ale przez moją pomyłkę zapomniałem pousuwać dodatkowe klamerki, które wcześniej porobiłem. Teraz działa:) i tam jeszcze zamiast 32 powinno być 10, bo wstawia spacje zamiast enterów. Nie wiem czemu co parę linijek źle wstawia znaki nowego wiersza, bo czasami o jeden wyraz za daleko. Nie mam pojęcia czym to jest spowodowane.
ODPOWIEDZ