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

Problem z instrukcja warunkowa if

Ostatnio zmodyfikowano 2015-03-25 23:13
Autor Wiadomość
Wronski
Temat założony przez niniejszego użytkownika
Problem z instrukcja warunkowa if
» 2015-03-25 15:05:40
witajcie, mam problem z ustaleniem warunku petli if :|

C/C++
getline( cin, tekst );

for( int i = 0; i <= tekst.length() - 1; i++ )
{
    if(( tekst[ i ] != '0' ) &&( tekst[ i ] != '1' ) &&( tekst[ i ] != '2' ) &&( tekst[ i ] != '3' ) &&( tekst[ i ] != '4' )
    ||( tekst[ i ] != '9' ) &&( tekst[ i ] != '8' ) &&( tekst[] != '7' ) &&( tekst[ i ] != '6' ) &&( tekst[ i ] != '5' ) )
}

Tak wyglada ten if, wydaje mi sie, ze gdy wpisze np:432432 if powinien sie nie wykonac, a dla np: 32dsa32 powinien sie wykonac.
On jednak wykonuje sie cokolwiek bym nie wpisal, nie wiem co zle napisalem, pozdrawiam;
P-129143
Deyvin
Literówka
» 2015-03-25 15:39:26
Z literówek wychwyciłem, że przy warunku z 7 nie masz podanego elementu tablicy
tekst[] != '7'
.

A co do warunku może jeśli podasz jakie zadanie ma spełniać ten if to łatwiej będzie Ci pomóc.
P-129146
aksen
» 2015-03-25 15:40:43
Wklej cały kod programu (pewnie jest niewielki)
P-129147
Wronski
Temat założony przez niniejszego użytkownika
» 2015-03-25 16:06:09
dokladnie ma sprawdzac czt wpisalem liczbe czy tekst, zalezy mi na tym by bylo to zrobione sposobem sprawdzania kazdego znaku po kolei
C/C++
#include <iostream>

using namespace std;
int main()
{
    string tekst;
   
    bool wyraz = false;
   
    while( getline( cin, tekst ) )
    {
        int dl = tekst.length();
       
        while( dl-- )
        {
            if(( tekst[ dl ] != '0' ) &&( tekst[ dl ] != '1' ) &&( tekst[ dl ] != '2' ) &&( tekst[ dl ] != '3' ) &&( tekst[ dl ] != '4' )
            ||( tekst[ dl ] != '9' ) &&( tekst[ dl ] != '8' ) &&( tekst[ dl ] != '7' ) &&( tekst[ dl ] != '6' ) &&( tekst[ dl ] != '5' ) ) wyraz = true;
           
        }
       
        if( wyraz == true ) cout << "wyraz" << endl;
        else cout << "cyfra" << endl;
       
        if( cin.eof() ) break;
       
        wyraz = false;
       
    }
   
   
    return 0;
}

Jezeli wpisze cokowiek if zawsze zwraca wyraz=true
moglem odrazu wrzucic caly kod :p

Edit: Dobra, rozwiazalem, poprostu jestem glupi i slepy  :) zamiast sprawdzic kod szukalem pomocy :P sory za zmarnowanie czasu ;p zamiast jednego && mialem ||
P-129149
aksen
» 2015-03-25 16:24:22
P-129151
Monika90
» 2015-03-25 17:41:41

http://cpp0x.pl/dokumentacja​/standard-C/isdigit/252
wg mnie argument typu char powinien być rzutowany na unsigned char, dla wszystkich tych funkcji:
http://cpp0x.pl/dokumentacja​/standard-C/Operacje-na-znaku​/240
P-129155
Deyvin
» 2015-03-25 19:55:13
Program działa ale nie do końca poprawnie - sprawdź co się dzieje jak nic nie wpiszesz i dasz enter lub jak wpiszesz spację albo cyfrę i spacje.
Dodatkowo warunek pętli i  warunek if'a w pętli, nigdy nie będą odpowiednio fałszywy w pętli i prawdziwy w if'ie żeby zakończyć działanie pętli...
Tutaj akurat to nie jest takie groźne bo program czeka na podanie znaku ale możesz kiedyś tak narobić sobie kłopotów.

P-129161
Wronski
Temat założony przez niniejszego użytkownika
» 2015-03-25 23:13:17
@Deyvin Dziekuje za wskazowki, wiem ze to co to dalem nie bylo do konca poprawne, gdyz wycialem zaledwie funkcje z kodu by latwiej wam bylo znalezc blad z ktorym nie moglem sobie poradzic dalsza czesc kodu nie miala z tym nic wspolnego :) Ale dzieki Twoim wskazowka kilka "przypadkow szczegolnych"
tak wiec dzieki wielkie.

@aksent Wiem, jednak staralem sie sam sobie poradzic i sie udalo :) ale dzieki, z funkcji napewno skorzystam :)

Wrzuce kod, jezeli ktosby mial jakies uwagi prosze pisac(kod dziala jedynie dla cyfr dodatnich :)), ale nie w styly, totalnie zle :D, wiem, ze da sie takie rzeczy zapisac duzo latwiej, zdaje sbie sprawe tez z tego ze wiele rzeczy moglem z robic na okolo. Mam nadzieje ze pare miesiecy piszac podobne zadanie, bede umial sobie z nim poradzic lepiej, szybciej i bardziej przejrzyscie :)

Dziekuje wszystkim za pomoc !

Oczywiscie kod sprawdza ile w podanym ciagu znakow mamy cyfr a ile "ciagow nie bedacych cyframi"

C/C++
#include <iostream>
#include <string>

using namespace std;

int int_or_str( string tekst );

int main()
{
    string tekst;
   
    int ilecyfr = 0, ilewyrazow = 0;
   
    while( getline( cin, tekst ) )
    {
       
        int dl = tekst.length();
       
        if( dl == 1 && tekst[ 0 ] != 32 ) // tylko spacja
        {
           
            if( int_or_str( tekst ) == 0 ) ilewyrazow++;
            else if( int_or_str( tekst ) == 1 ) ilecyfr++;
           
        }
       
        else if( tekst[ 1 ] == 32 ) // 1 znak i spacja/e
        {
            string pom = "";
            pom = tekst[ 0 ];
            if( int_or_str( pom ) == 0 ) ilewyrazow++;
            else if( int_or_str( pom ) == 1 ) ilecyfr++;
           
        }
       
        string pom = "";
       
        while( dl-- )
        {
            if( tekst[ dl ] == 32 || dl == 0 )
            {
                if( int_or_str( pom ) == 0 ) ilewyrazow++;
                else if( int_or_str( pom ) == 1 ) ilecyfr++;
               
                pom = "";
            }
            else
            {
                pom += tekst[ dl ];
            }
        }
        if( cin.eof() ) break;
       
        cout << ilecyfr << " " << ilewyrazow << endl;
        ilecyfr = 0;
        ilewyrazow = 0;
    }
   
    return 0;
}

int int_or_str( string tekst )
{
    //cout<<tekst<<endl;
    if( tekst == "" ) return 2;
   
    bool wyraz = false;
   
    int dl = tekst.length();
   
    while( dl-- )
    {
        if(( tekst[ dl ] != '0' ) &&( tekst[ dl ] != '1' ) &&( tekst[ dl ] != '2' ) &&( tekst[ dl ] != '3' ) &&( tekst[ dl ] != '4' )
        &&( tekst[ dl ] != '9' ) &&( tekst[ dl ] != '8' ) &&( tekst[ dl ] != '7' ) &&( tekst[ dl ] != '6' ) &&( tekst[ dl ] != '5' ) ) wyraz = true;
       
    }
   
    if( wyraz == true ) return 0;
    else return 1;
   
}
P-129182
« 1 »
  Strona 1 z 1