Zamiana kolejnosci wtrazow

0

Witam Chcialbym napisac program w C ktory zamienia wyrazy kolejnoscia w calym zdaniu a jesli napotka kropke to przechodzi do nowej lini.
Np

Chcialbym napisac program.
myblaichC casipan .margorp

na razie napisalem cos takiego

#include<stdio.h> 
int main() 
{ 
    int n=1; 
char napis[n], odwrocony[n]; 
        n++; 
        int i; 
        while(scanf("%s",&napis)!=EOF) 
        { 
            int dlugosc = strlen(napis); 
            for(i=0; i<dlugosc; i++) 
            { 
            odwrocony[i] = napis[dlugosc-i-1]; 
            } 
            printf("%s",odwrocony); 
            dlugosc=0; 
        } 
        system("PAUSE"); 
        return 0; 
} 
 

Tylko to nie robi spacji miedzy wyrazami i laczy je i tu mam probelm.;/
Prosze o pomoc.

0
int n=1; 
char napis[n], odwrocony[n];

I sense much fail here.

"%s" -> "%s " lub "%s\n", gdy napotkasz na tą swoją kropkę.

0

No bo ma sie w nieskonczonosc robic dlatego n=1 a potem n++.
To tez juz ogarnalem ale jak z tymi napisami ? Żeby to sie nie laczylo poprzedni z nastepnym ;/

0

Że jak gdzieś w losowym miejscu w kodzie walniesz n++ to nagle tablice mają ci się zrobić nieskończenie duże? Aha. Polecam powrót do podręcznika.

0

No fakt ;D
Bład.
A te wyrazy zeby sie nie sumowaly to jak to obejsc ?

0
  1. Twój program nie zmienia kolejności wyrazów, lecz odwraca je zachowując pierwotny szyk. Zmiana kolejności wyrazów np. na odwrotną to "Ala ma kota" -> "kota ma Ala".
  2. Źle deklarujesz c-stringi, ale podobno sobie z tym już poradziłeś.
  3. Jeśli tylko chcesz wypisywać wynik i nie potrzebujesz tego w oddzielnych zmiennych, olej odwrocony i jedź w pętli od końca, wypisując znak po znaku (zawsze to jakaś oszczędność pamięci).
  4. Używając scanf() w ten sposób możesz sobie strzelić w stopę, gdyż zakładasz, że wycięty napis zmieści się w docelowym miejscu. Ponieważ nie wiesz jak długie mogą być wyrazy, nie masz możliwości kontrolowania zakresów. Wyjazd poza zakres -> bardzo złe rzeczy się będą działy.
  5. Co rozumiesz przez "przechodzi do nowej linii"? Olewa wszystkie znaki z wejścia aż do znaku nowej linii? Wypisuje znak nowej linii na wyjściu? Z kodu to nie wynika, gdyż nie obsługujesz w nim przypadku napotkania kropki, albo ja tego tam nie widzę (podeszły wiek, wzrok już nie ten).
  6. Dlaczego alokujesz nową zmienną dlugosc przy każdym obrocie pętli? Po co ją zerujesz pod koniec iteracji?
  7. system("PAUSE")... Ty rasisto! ;)
  8. Zwiększ czytelność swojego kodu już dziś! int n, i, dlugosc;

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