Problem w funkcji C++

0

Cześć, mam taki program (poniżej), który ma zwracać adres łańcucha (funkcja wielkie() ) oraz wświetlać go na ekranie (main). Nie wiem czemu cout<<n nie pokazuje łańcucha na ekranie. Próbowałem poprzedzić go operatorem wyłuskania (*), ale bez skutku. Proszę o jakąś podpowiedź. Myślę, że problem może leżeć w "returnie" w funkcji wielkie, natomiast nie wiem dlaczego. (Wiem, że mógłbym umieścić cout w funkcji wielkie w pętli while, ale chcę wyswietlić cały łańcuch w mainie, lub inną funkcją).

char *wielkie(char *str);
int main()
{
char  tekst[80];
cout<< "podaj lancuch (q, konczy wprowadzanie danych)"<<endl;
while (cin.getline(tekst,80))
{
        char *n= wielkie(tekst);
        **cout<<n<<endl;**
        cout<<"Nastepny lancuch (q, konczy wprowadzanie) "<<endl;
}
    return 0;
}
 char *wielkie(char *str)
{
    if(*str=='q')
        {
            cout<<"do widzenia"<<endl;
            exit(0);
        }
    while(*str)
    {
          *str = toupper(*str);
           str++;
    }
return str;
}
1

funkcja wielkie powinna przyjmować wskaźnik, wieć to pewno może być problemem.

0
_dominik napisał(a):

funkcja wielkie powinna przyjmować wskaźnik, wieć to pewno może być problemem.

poprawiłem czytelność i wskażniki się pojawiły :)

3

Zepsułeś wskaźnik przed zwróceniem.

#include <iostream>
using namespace std;

char *wielkie(char *str)
{
        if((*str=='q')||(*str=='Q')) return 0;
        for(char *i=str;*i;*i=toupper(*(i++))) {}
        return str;
}

int main()
{
        char  tekst[80];
        while((cout<<"podaj lancuch (q, konczy wprowadzanie danych): ")&&(cin.getline(tekst,80)))
        {
                cout<<wielkie(tekst)<<endl;
        }
    return 0;
}
2
    while(*str)
    {
          *str = toupper(*str);
           str++;
    }
return str;  // co tu zwracasz ?
0

Wprawdzie "fabryczne" funkcje C 1) modyfikujące string zwracają go, ale to jest bardzo mylące w czytaniu takiego kodu, oczom się wydaje, że dzieje się coś innego, niż w rzeczywistości.
Istota tych funkcji to coś zupełnie innego, a return to tylko kwiatek do kożucha.
Sam obudzony w nocy o północy będziesz błędnie czytał swój własny kod.

W projektach początkujących by dał void.
Konwencja z C ma strasznie wiele lat, i tylko dlatego jest kontynuowana, wg mnie ma wiele poważnych wad i niewiele (jedną?) zalet/ę.

Zapis algorytmów będzie o kilka znaków dłuższe, mniej "chakierski", ale kod będzie dawał prawidłowe sugestie.

void wielkie(char *str)
{
}

cin.getline(tekst,80);
wielkie(tekst);
cout<< tekst <<endl;

  1. a nie C++ - to co używasz to koszmarek, takie C ze strumieniami.
    Jak chcesz używać C++, to go NAPRAWDĘ używaj, nawiasem mówiąc funckcje zwracające std::string to miód

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