Pomoc w totalnych podstawach c++.

0

Witam, mam kilka pytań.

  1. Jak mam zabezpieczyć zmienną a i b, aby kiedy wpisze się literę lub znak, powracało do pytania?
  2. Trochę nieumiejętnie ująłem koniec pętli do... while... Proszę o wytłumaczenie i/lub pokazanie, jak ma wyglądać coś takiego - mam nadzieję, że ogólny sens załapaliście.
#include <iostream>

using namespace std;

int main()
{

    double a, b;
    char litera;

    do {   
        cout << "Program porownujacy liczby.\n";
        cout << "Wprowadz pierwsza liczbe: ";
        cin >> a;
        cout << "Wprowadz druga liczbe: ";
        cin >> b;

        if(a>b) cout << "Liczba " << a << " jest liczba wieksza.";
        else if(a<b) cout << "Liczba " << b << " jest liczba wieksza.";
             else cout << "Liczby sa rowne.";
        cout << "Czy chcesz ponownie uruchomic program? T/N: ";
        cin >> litera;
    } while(litera !='N' and litera !='n');
}

Dzięki!

1
  1. Najłatwiej f-cją isdigit - http://www.cplusplus.com/reference/clibrary/cctype/isdigit/
  2. Chyba łatwiej zmienić pętle..
1
  1. Sprawdzasz strumień za pomocą cin.rdsatate(), następnie używasz funkcji: cin.ignore() oraz cin.clear()
  2. Zamiast "and" robisz koniunkcję za pomocą: &&
0

W takim razie 2 pytanie skonstruowałeś źle i nie wiem czy odpowiedź wyżej jest zadowalająca skoro zamiast T można wpisać obojętnie jaką literkę, oprócz N,n, żeby spełnić warunek..

0

Badkid, nie do końca rozumiem funkcję isdigit, mógłbyś pomóc mi to zrozumieć na tym przykładzie(np. napisać kilka linii kodu)? W drugim pytaniu chodzi mi dokładnie o opcję wyboru T/N. Nie wiem, jak mam to rozwiązać.

1
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main ()
{
    char ch;
    scanf("%c", &ch);
    if(isdigit(ch))
        printf("digital\n");
    else
        printf("another sign\n");
        
        getchar();

}

isdigit zwraca true gdy podany znak jest cyfrą.

1

Jak na moje oko to brakuje Ci literatury żeby się uczyć.
Nie znasz operatorów, które są oczywiście podstawą z podstaw jeśli chcesz w miarę umiejętnie stosować instrukcje sterujące i pętle, a bierzesz się za rzeczy które powinny Cię obchodzić nieco później.

Skup się na podstawach i na jakiejś dobrej książce.

0

By zlikwidować błąd strumienia, to trzeba zrobić (przynajmniej mnie tak uczono) :

    
    int a;
    do{
       cin.clear();
       cin.ignore(1024,'\n');  
       cin >> a;
    }while(cin.rdstate()); 

Pętla, która zakończy się po wpisania liczby (jeśli wpiszesz literę, pętla się powtórzy)

0

1024? A nie 1000?

0

Ale co to za różnica 1000 czy 1024. Nie ma to większego znaczenie, czy wstawisz 10000 czy 10

0

Albo i std::numeric_limits<unsigned long>::max(); zamiast tego.

while (!(in >> v)) {
    in.clear();
    in.ignore(std::numeric_limits<unsigned long>::max(), '\n');
    if (!repeat_message.empty()) {
        out << repeat_message;
    }
}

Gdzie in to std::istream& (akurat w typ przypadku referencja do cin), out to std::ostream& (w tym przypadku referencja do cout) Wstaw sobie to w szablon operatora >> i masz "własny cin", który będzie pytał jeszcze raz o wartość, jeżeli w czasie wczytywania zostanie ustawiona flaga błędu. ;)

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