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

O co chodzi w programie ??

Cloud VPS
0 głosów
305 wizyt
pytanie zadane 5 sierpnia 2015 w C i C++ przez rafalmagician Obywatel (1,320 p.)

Dlaczego ten program nic nie wyświetli ?? Może ktoś wytłumaczyć mi linia po linii ??

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

void f(char *s)
{
    while(*s)
    {
        if(strlen(s)%2)
        {
            *s = '#';
        }
    ++s;
    }
}

int main()
{
    char t[10] = "petla for";
    f(t);

    return 0;
}

 

Edit: Wiem... Bo nie ma  printf()... Ale wciąż jest 2 pytanie...

2 odpowiedzi

0 głosów
odpowiedź 5 sierpnia 2015 przez Magicone Nałogowiec (45,100 p.)
Pierwsze trzy to includowanie bibliotek, piąta deklaruje funkcje o nazwie f, przyjmująca za argument wskaźnik na tablicę o typie char. Każdy, nieparzysty z kolei znak zamieni na '#'. W funkcji main deklarujesz sobie taką tablicę, aczkolwiek nie jest to wskaźnik, więc kompilator powinien zgłupieć i nie przyjąć ci tego. Zadeklaruj to tak: char* t = new char[10]; t="petla for"; po f(t), t powinno wyglądać tak: p#t#a#f#r :)
komentarz 5 sierpnia 2015 przez rafalmagician Obywatel (1,320 p.)
Wielkie Dzięki :)
komentarz 5 sierpnia 2015 przez Dorion300 Szeryf (90,250 p.)
Sama nazwa tablicy to wskaźnik, wiec wszystko ma prawidłowo.
0 głosów
odpowiedź 5 sierpnia 2015 przez Bartek85 Mądrala (7,440 p.)

Hm... A dlaczego miałby coś wyświetlić? W tym kodzie nie ma instrukcji do wypisywania zawartości na standardowe wyjscie(na ekran).

Wytłumaczenie...

include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// deklaracja i implementacja funkcji f,
//  która jako argument przyjmuje wskaźnik typu char i nie zwracająca nic
//  pamiętajmy, że jest to kopia wskaźnika, a ten sam wskaźnik!
void f(char *s) 
{
   // pętla while
   // jako warunek sprawdzający wyłuskuje wartość spod wskaźnika s,
   // jeżeli wartość różna od 0 to pętla działa, w przeciwnym wypadku się przerywa
    while(*s)
    {
        // funkcja strlen zwraca długość łańcucha znakowego
       // następnie jeżeli długość ciągu znakowego jest NIE podzielna przez 2 bez reszty
       // wtedy wchodzi do wykonania instrukcji w "if"
        if(strlen(s)%2)
        {
            // *s - wyłuskanie wartość na która wskazuje wskaźnik,
            // a następnie wpisanie pod ta komórkę znaku #
            *s = '#';
        }
   // ikrementacja wskaźnika
   // tutaj wskaźnik jest przesuwany na następny element.
    ++s;
    }
}
 
int main()
{
    char t[10] = "petla for"; // deklaracja i inicjalizacja tablicy statycznej.
    f(t); // wywołanie funkcji "f" z argumentem t
 
    return 0;
}

Jak się domyślam wynikiem tej funkcji będzie coś takiego:

#e#l#a #o#

komentarz 5 sierpnia 2015 przez rafalmagician Obywatel (1,320 p.)
Też dzięki :)
komentarz 5 sierpnia 2015 przez rafalmagician Obywatel (1,320 p.)
A gdzie ma być funkcja printf() ??
komentarz 5 sierpnia 2015 przez Bartek85 Mądrala (7,440 p.)

Zależy co chcesz osiągnąc.

Jak chesz zobaczyć zawartość tablicy przed i po to wyświetl ją sobie przed i po, jak tylko po to po. Poniżej kod.

int main()
{
    char t[10] = "petla for"; // deklaracja i inicjalizacja tablicy statycznej.

    printf(t); // wyświetlenie przed wywołaniem funkcji.
    f(t); // wywołanie funkcji "f" z argumentem t
    printf(t); // wyświetlenie po wywołaniu funkcji
  
    return 0;
}

 

komentarz 5 sierpnia 2015 przez rafalmagician Obywatel (1,320 p.)
A ok... Już rozumiem bo ja pisałem tak: printf("%c",t); i coś nie działało...

Podobne pytania

0 głosów
1 odpowiedź 410 wizyt
pytanie zadane 16 października 2015 w C i C++ przez Mateep Użytkownik (850 p.)
–1 głos
4 odpowiedzi 229 wizyt
pytanie zadane 13 sierpnia 2015 w C i C++ przez rafalmagician Obywatel (1,320 p.)
+1 głos
1 odpowiedź 473 wizyt
pytanie zadane 12 marca 2022 w C i C++ przez Sway22 Początkujący (270 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 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

Kursy INF.02 i INF.03
...