Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z warunkiem pętli, który ma kończyć wczytywanie danych na '@'

Ostatnio zmodyfikowano 2019-11-10 15:50
Autor Wiadomość
Vatnax
Temat założony przez niniejszego użytkownika
Problem z warunkiem pętli, który ma kończyć wczytywanie danych na '@'
» 2019-11-10 12:24:14
Witam, otóż mam taki kod:

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

int main()
{
string x;
cout<<"Pisz cos: (znak @ konczy wpisywanie danych)"<<endl;
getline (cin,x);
for (int i = 0 ; x!='@'; i++)
{
if (islower(x)) x= toupper (x);
else if (isupper(x)) x = tolower (x);
else if (isdigit(x)) x = 0;
else x=' ';
}

cout<<"Przekonwertowany zapis: ";
cout<<x;

return 0;
}

Niestety, nie działa on prawidłowo, bo kończy się po kliknięciu Enter, a w warunku pętli jest napisane, że ma się kończyć dopiero, gdy napotka znak '@'. Nie wiem, co jest tutaj źle napisane, byłbym wdzięczny za pomoc.
P-175526
nanoant20
» 2019-11-10 15:47:31
mozna by skorzystać z pętli nieskończonej, np. tak
C/C++
for( int i = 0;; i++ )
{
    if( x == "@" )
    {
        cout << "wpisales @ - koniec programu" << endl;
        break;
    }
ale i tak dalej nie zadziała

mozna by i tak

C/C++
#include <locale>         // std::locale, std::islower, std::toupper, std::isdigit
#include <string>         // std::string

locale loc;
string str;
char c;

cout << "Pisz cos: (znak @ konczy wpisywanie danych)" << endl;

for( int i = 0;; i++ )
{
    getline( cin, str );
    c = str[ i ];
    if( str == "@" )
    {
        cout << "wpisales @ - koniec programu" << endl;
        break;
    }
    if( islower( c, loc ) ) c = toupper( c, loc );
   
    cout << c;
   
}
P-175527
pekfos
» 2019-11-10 15:50:47
C/C++
getline( cin, str, '@' );
P-175528
« 1 »
  Strona 1 z 1