Słowo wspak - problem z programem - brak możliwości naciśnięcia Enter

0

Witam, postanowiłem przećwiczyć możliwość zrobienia programu ,w którym piszę wyraz i po naciśnięciu Enter powinien pokazywać się wspak. Zdaje się, że coś przeoczyłem ale nie mam pojęcia co. Pomożecie ? : ) Nie wiem czy dobrze wpisałem bb-code podany na forum by się pokazał kod poprawnie

#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;

void wspak()
{
char znak;
cin>>znak;
if (znak!='')
{
wspak();
cout<<znak;
 }
}
int main()
{
wspak();

cin.ignore();
getchar();
return 0;
}
0

Z racji tego ,że poprzedniego posta nie mogę edytować to dodam ,że zrobiłem wreszcie to tyle, że przy wpisywaniu kropki pojawia się słowo wspak, natomiast jak mogę zrobić by po zapisaniu słowa i wpisaniu Enter dopiero słowo pojawiało się wspak ?

#include <iostream>
#include <cstdlib>
#include <ctime>
#include<iostream>
using namespace std;

void wspak()
{
     char znak;
cin>>znak;
if (znak!='.')
{
wspak();
cout<<znak;
}
}
int main()
{
wspak();

cin.ignore();
 getchar();
 return 0;
} 
0
if (znak!='\n')
0
Azarien napisał(a)
if (znak!='\n')

Niestety to nie pomaga

0
/*...*/
//cin>>znak;
znak=getchar();
if (znak!='\n')
/*...*/

Takie coś działa.

0
Jadeszek napisał(a)
/*...*/
//cin>>znak;
znak=getchar();
if (znak!='\n')
/*...*/

Takie coś działa.

Gdy naciśniemy ENTER to przechodzimy do drugiej linii. Chodzi o to by po naciśnięciu ENTER pokazywało się od razu to słowo ułożone wspak natomiast nadal w tym programie trzeba wpisać Kropkę (.) by słowo wpisało się wspak : /

0

char służy do przechowywania znaku (jednego!). Stwórz tablicę charów (jednak wtedy słowo będzie ograniczone do wielkości tablicy - 1), a potem np. za pomocą pętli for wypisuj znaki od tyłu lub zainteresuj się klasą String :)

EDIT@
Chociaż jak tak patrzę dłużej na Twój kod źródłowy to już wiem o co Ci chodziło :)
A tutaj przykład ze stringiem:

 #include <iostream>
#include <string>

using namespace std;

void wspak()
{
     string slowo;
     getline(cin, slowo);

     for(int i = slowo.length() - 1; i >= 0; i--)
     {
         cout << slowo.at(i);
     }
}
int main()
{
    wspak();


    cout << "\nNacisnij jakikolwiek klawisz, aby zakonczyc.";
    getwchar();
    return 0;
}

EDIT2@
Dobra już sobie przypomniałem :) Cin wczytuje znaki do napotkania \n, gdy go napotka zostawia go. Dlatego powinno się użyć gechar zamiast cin, oto twój działający przykład:

#include <iostream>
#include <cstdlib>
#include<iostream>
using namespace std;

void wspak()
{
    char znak;
    znak = getwchar();

    if (znak != '\n')
    {
        wspak();
    }

    cout<<znak;
}

int main()
{
     wspak();

     getwchar();
     return 0;
}
0

może coś takiego (tylko Windows):

#include <conio.h>
#include <cstdio>
#include <list>
 
using namespace std;
 
void wspak()
{
  list<char> znaki;
  while(1)
    {
      char znak = getche();
      if (znak=='\r')
        {
          for (list<char>::reverse_iterator it = znaki.rbegin(); it!=znaki.rend(); ++it)
            putchar(*it);
          break;
        }
      else
        {
          switch (znak)
            {
              case '\b': // uwzglednienie backspaca
                {
                  putchar(' ');
                  putchar('\b');
                  znaki.pop_back();
                  break;
                }
              // tutaj powinno byc jeszcze uwzglednienie strzalek itp, ale nie chce mi sie pisac :P
              default:
                znaki.push_back(znak);
            }
        }
    }
  putchar('\n');
}

int main()
{
  // jak chcesz tylko jeden wyraz to zakomentuj lub usun ponizsza linie
  while (1)
    wspak();
  
  printf("koniec, nacisnij jakis klawisz...\n");
  getch();
  return 0;
}
0
tomepaw napisał(a)

char służy do przechowywania znaku (jednego!). Stwórz tablicę charów (jednak wtedy słowo będzie ograniczone do wielkości tablicy - 1), a potem np. za pomocą pętli for wypisuj znaki od tyłu lub zainteresuj się klasą String :)

EDIT@
Chociaż jak tak patrzę dłużej na Twój kod źródłowy to już wiem o co Ci chodziło :)
A tutaj przykład ze stringiem:

 #include <iostream>
#include <string>

using namespace std;

void wspak()
{
     string slowo;
     getline(cin, slowo);

     for(int i = slowo.length() - 1; i >= 0; i--)
     {
         cout << slowo.at(i);
     }
}
int main()
{
    wspak();


    cout << "\nNacisnij jakikolwiek klawisz, aby zakonczyc.";
    getwchar();
    return 0;
}

EDIT2@
Dobra już sobie przypomniałem :) Cin wczytuje znaki do napotkania \n, gdy go napotka zostawia go. Dlatego powinno się użyć gechar zamiast cin, oto twój działający przykład:

#include <iostream>
#include <cstdlib>
#include<iostream>
using namespace std;

void wspak()
{
    char znak;
    znak = getwchar();

    if (znak != '\n')
    {
        wspak();
    }

    cout<<znak;
}

int main()
{
     wspak();

     getwchar();
     return 0;
}

DZIĘKI WIELKIE :)
Aż przekopiowalem sobie cały Twój post, o to mi właśnie chodziło : )

0

Jaki sens używania do tego rekurencji :D?

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