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

Program, który wczytuje słowo z klawiatury do tablicy i wypisuje je z tablicy na ekran od końca.

VPS Starter Arubacloud
0 głosów
2,805 wizyt
pytanie zadane 11 listopada 2016 w C i C++ przez Jakub12091 Nowicjusz (220 p.)
edycja 11 listopada 2016 przez ScriptyChris

Hej !

Próbuję rozwiązać to zadanie :

"Napisz program, który wczytuje słowo z klawiatury do tablicy i wypisuje je z tablicy na ekran od końca. Przykładowe wywołanie jest takie:

Podaj słowo s t o Słowo od końca brzmi: o t s "

Wykodziłem coś takiego :
 

#include <stdio.h>
void main()
{
    int k, i, d;
    char znak, c;

    k=0;
    i=0;
    printf("ile liter liczy slowo ? \n");
    scanf("%d",&k);

    char tab[k];
    printf("napisz to slowo \n");
    while (i<k) {
    scanf("%c",&znak);
    tab[i]=znak;
   c = getchar();
    i=i+1;
     }
     printf("slowo od konca brzmi \n");
     i=k-1;
     while(i>=0) {
         printf("%c ",tab[i]);
         i=i-1; }

}



Niestety program nie wypisuje słowa od końca, nie widzę błędu, jestem w kropce. Chyba muszę się wyspać ;) Proszę o pomoc.

3 odpowiedzi

+1 głos
odpowiedź 11 listopada 2016 przez mrcnsct Nałogowiec (36,390 p.)
wybrane 11 listopada 2016 przez Jakub12091
 
Najlepsza

Wypisuje słowo, tylko ono składa się z białych znaków, bo znak nowej linii po pierwszym scanf (tym z %d) odczytuje scanf z pętli, getchar odczytuje wpisany znak, potem znowu scanf biały znak i getchar wpisany znak itd. Możesz dodać jeszcze getchar pod pierwszym scanf, albo całkiem wywalić te getchary (i wczytywac od razu do tablicy, bo to wczytywanie najpierw do zmiennej znak jest niepotrzebne) i w scanf dać spację, czyli 

scanf(" %c",&tab[i]);

Dzięki tej spacji białe znaki zostaną pominięte, scanf ich nie wczyta do zmiennej. Po co przypisywać do k 0 jak i tak później wczytujesz do niego wartość przez scanf.

#include <stdio.h>

int main(){
    int k, i=0;
    printf("ile liter liczy slowo ? \n");
    scanf("%d",&k);
    char tab[k];
    printf("napisz to slowo \n");
    while (i<k) {
        scanf(" %c",&tab[i]);
        i=i+1;
    }
    printf("slowo od konca brzmi \n");
    i=k-1;
    while(i>=0) {
         printf("%c ",tab[i]);
         i=i-1;
    }

    return 0;
}
+1 głos
odpowiedź 11 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 11 listopada 2016 przez plkpiotr

Przy tablicach bardziej naturalne wydaje mi się korzystanie z pętli for, choć pętla while błędem nie jest... Jak zrobiłbym coś takiego - kompilator wie od razu ile zarezerwować pamięci na tablicę, a później tylko pobieranie ze strumienia oraz wyświetlanie do końca do początku. Wydaje mi się, że uprości to znacznie Twój problem, bo po co utrudniać sobie życie. Jakby nie patrzeć jedna dyrektywa, jedna zmienna i jedna tablica, a kod krótszy o połowę ; )

#include <stdio.h>
#define DLUGOSC 4

int main() {
    int i = 0;
    char napis[DLUGOSC];
    for (i = 0; i < DLUGOSC; i++)
        scanf("%c", &napis[i]);
    for (i = DLUGOSC - 1; i >= 0 ; i--)
        printf("%c", napis[i]);
    return 0;
}

 

0 głosów
odpowiedź 11 listopada 2016 przez HaKIM Szeryf (87,590 p.)

W c++ nie programuję, choć, mogę pomóc na podstawie PHP.

Znak dolara - prefiks dla zmiennej.

/**
  * Konwertuje string do array.
  * http://php.net/manual/en/function.str-split.php
*/
$input = str_split('Kura');

/**
  *Odwrotne sortowanie. SORT_NUMERIC - Flaga, aby robiło po liczbach(indexy).
  *http://php.net/manual/pl/function.krsort.php
*/
krsort($input, SORT_NUMERIC);
/**
  *Pętla. Powiedzmy, że daje nam literka po literce.
  *Jeżeli napisz „Tak”, to podczas wyświetlania $val[0] w foreach 
  *dostaniemy pierwszą literę „T”.
  *http://stackoverflow.com/questions/2047414/advantages-of-stdfor-each-over-for-loop
*/
foreach ($input as $key => $val) {
    /**
      *Wyświetla napis.
      *Implode - aby nie było spacji między literkami.
      *http://php.net/manual/en/function.implode.php
    */
    echo implode("", [$val]);
}

Wystarczy poszukać zamienników na C++ i voilà.

komentarz 11 listopada 2016 przez Patrycjerz Mędrzec (192,340 p.)
Wybacz, ale ta odpowiedź praktycznie nic nie wnosi. Ja stosuję zasadę, że jak nie znam danej technologii, to się o niej nie wypowiadam.
komentarz 11 listopada 2016 przez HaKIM Szeryf (87,590 p.)
Również.

Nie sądzę aby w Cpp nie dało się napisać kodu który wykonywałby się w sposób taki, jak podałem powyżej. Specjalnie podałem link'i do funkcji aby, w przypadku braku odzwierciedleń w Cpp, mógł je zaimplementować.

Z początku założyłem żeby nic nie pisać, acz, skoro nikt nie udzielił pomocy przez dłuższy czas nad tak prostą sprawą, a kod wydaje mi się zbyt długi dla tej błahostki, postanowiłem się udzielić.

Krzywdy nie robię, a nuż widelec wpadnie mu coś do głowy co mógłby zapożyczyć z kodu PHP'a. ;)

Choć, rozumiem co masz na myśli.
komentarz 11 listopada 2016 przez Patrycjerz Mędrzec (192,340 p.)
Spoko, krzywdy nikomu nie robisz, no ale jednak rozumiesz, o co mi chodzi - pod pytaniami na temat danej technologii piszmy kod związany jedynie z nią, ewentualnie pseudokod lub listę kroków, bo inaczej robi się mętlik.

A jeśli chodzi o język, to wygląda to raczej na C niż C++, ale mogę się mylić.
komentarz 11 listopada 2016 przez HaKIM Szeryf (87,590 p.)

Najbardziej podkusiło mnie do napisania tego posta przerażająca ilość linii kodu dla tego problemu.

ewentualnie pseudokod lub listę kroków, bo inaczej robi się mętlik.

Gdyby tak zamienić komentarze, które tam zawarłem, na formę instrukcji to:

  1. Skonwertuj string do array.
  2. Skorzystaj z funkcji dla odwrotnego sortowania po indeksach numerowanych.
  3. Wyświetlenie odwrotnie sortowanego stringu (Patrz punkt: 2). 

Podobne pytania

0 głosów
1 odpowiedź 714 wizyt
pytanie zadane 11 stycznia 2017 w C# przez szpytma_1 Początkujący (340 p.)
0 głosów
2 odpowiedzi 182 wizyt
0 głosów
2 odpowiedzi 3,284 wizyt

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...