Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
C++

Problem w napisaniu programu - prośba o pomoc

c++ pomoc prośba program napisaniu napisanie problem

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
12 odpowiedzi w tym temacie

#1 Zacco1248

    Życzliwy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:28
  • Imię:Adrian
  • Lokalizacja:Trzemeszno
Offline

Napisano 02.11.2013 18:51

Witam uczę się języka c++ z pewnego poradnika. Mam napisać program który : 
Który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. Wykorzystaj do tego celu wiedzę z jednego z poprzednich rozdziałów. Sposób działania programu: 
1. Podaj liczbę 
2. Jeżeli błąd, wróć do kroku 1. 
3. Wypisz liczbę, która została podana. 

 

No dobra mniej więcej wiem jak to zrobić. Napisałem taki oto kod: 
 

#include <iostream>
using namespace std ;

int main()

{

    cout << "Podaj liczbe = " ;
    int a;
    char sprawdzenie ;
    sprawdzenie = cin.fail();
    do
    {
        cin >> a ;
        cout << "Sprawdzenie = " << a << sprawdzenie;

    }
    while(sprawdzenie == 0);

    return 0;

    }

Nie wiem czy jest dobrze dlatego pisze tutaj, ponieważ po wpisaniu liczby całkowitej każe mi wpisać jeszcze raz i tak bez końca, a po wpisaniu litery program wariuje i wypisuje ciągle " sprawdzenie = podana liczba całkowita ". Pomoże ktoś to ogarnąć? :) Z góry dzięki

 


  • +
  • -
  • 0

#2 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 02.11.2013 20:59

#include 
// jakby usunelo include to iostream
using namespace std ;

int main()

{
	char liczba;
	rep:
	cout << endl << "Podaj liczbe: ";
	cin >> liczba;
	
	if(isalpha(liczba))
	{
		cout << endl << "Wystapil blad: " << liczba << " nie jest cyfra!";
		goto rep;
	}
		
	cout << endl << "Liczba: " << liczba << " jest liczba calkowita!";
	return 0;
}
Do tego przydała by się funkcja : isalpha(string[]) czyli sprawdza czy dany ciag znakow albo znak jest litera z alphabetu
http://www.cplusplus.com/reference/cctype/

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#3 Zacco1248

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:28
  • Imię:Adrian
  • Lokalizacja:Trzemeszno
Offline

Napisano 02.11.2013 23:49

To jest dobrze tylko że to ma być z zastosowaniem pętli :)


  • +
  • -
  • 0

#4 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 03.11.2013 00:04

Argh ! Goto ? naprawdę ?! nabierasz zdecydowanie złych nawyków , nie rozprzestrzeniaj ich jak zarazy to że Ty używasz konstrukcji niepożadanych nie znaczy że inni muszą

po za tym widze tu bardziej pole dla int nie dla chara, może zabrzmi to troche niezrozumiale ale lepsze jest podejśćie whitelisty niż blacklisty

co znaczy że

Zabezpiecz przed wczytaniem nieprawidłowej liczby

 

jaka jest nieprawidłowa ?

 

Używająć int otrzymamy automatyczne rzutowanie !

 

Więc w praktyce nigdy nie uzyskamy czegoś innego niż liczba


  • +
  • -
  • 1

#5 Zacco1248

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:28
  • Imię:Adrian
  • Lokalizacja:Trzemeszno
Offline

Napisano 03.11.2013 00:31

To co ja mam zrobić? ;P


  • +
  • -
  • 0

#6 Zacco1248

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:28
  • Imię:Adrian
  • Lokalizacja:Trzemeszno
Offline

Napisano 03.11.2013 00:49

A jakbym zrobił coś takiego? Tylko problem w tym, że bez różnicy czy wpisze cyfre czy liczbe i tak pokazuje ze wybralem dobrą. Co w tym jest źle? 
 

#include <iostream>
using namespace std ;

int main()

{
	int liczba;
	cout << "Podaj liczbe rzeczywista = ";
	cin >> liczba;
    if ( liczba > 0)

        cout << "Brawo napisales dobra liczbe ";

        else
	do
	{

    cout << "Zla liczba podaj jeszcze raz";

	} while(liczba < 0);

	return 0;
}

Dobra ogarnąłem temat można zamknąć :) 


Użytkownik Zacco1248 edytował ten post 03.11.2013 01:11

  • +
  • -
  • 0

#7 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 03.11.2013 11:49

Pozwlę się spytać DarGL w czym źle napisałem, kod jest dobrze napisany,a goto nie używam zbyt często.

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#8 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 03.11.2013 11:58

Pozwlę się spytać DarGL w czym źle napisałem, kod jest dobrze napisany,a goto nie używam zbyt często.

To lepiej nigdy go nie używaj.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#9 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 03.11.2013 12:45

A co jest z nim nie tak ? jakoś trzeba przeskoczyć funkcję.

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#10 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 03.11.2013 14:01

Da się to rozwiązać innym sposobem, chociażby dobrze napisaną pętlą. Gdyby nie istniał inny sposób, wtedy ewentualnie można użyć goto. A co jest złego w tym przeskakiwaniu? Tu nie chodzi o jakieś techniczne sprawy, ale o czytelność.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#11 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 03.11.2013 19:16

no to ja nie widzę problemu w czytelności, znając angielski : goto - idź do, i tam dalej to szukam funkcji, każdy ma swój gust, dzięki za odp, temat można zamknąc ( tak jak autor stwierdził )

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#12 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 03.11.2013 19:49

Goto zaburza czytelność i przepływ kodu

 

W większych projektach jest to bardzo ważne aby o to dbać.

 

W C++ istnieje niechlubna instrukcja goto:
  goto identyfikator;
  identyfikator : instrukcja

Rzadko znajduje ona zastosowanie w ogólnym programowaniu wysokopoziomowym, lecz może być bardzo użyteczne, gdy program w C++ jest generowany przez inny program, a nie pisany bezpośrednio przez człowieka; np. instrukcje goto mogą być stosowane w parserze wygenerowanym z gramatyki przez generator parserów(wtrącenie ode mnie: jeżeli to ci nic nie mówi to to pomiń). Instrukcja goto może także być ważna w tych rzadkich przypadkach, kiedy osiągnięcie optymalnej efektywności staje się sprawą zasadniczą, np. w wewnętrznej pętli jakiegoś programu użytkowego czasu rzeczywistego.
 Jednym z kilku sensownych zastosowań goto w zwykłym kodzie jest umożliwianie wyjścia z zagnieżdżonej pętli lub instrukcji switch(break switch, która ją otacza). Na przykład

 

http://cpp0x.pl/forum/temat/?id=4213

 

Goto należy używać rozważnie i z głową


  • +
  • -
  • 0

#13 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 04.11.2013 14:08

No kiedyś właśnie o tym też czytałem, ale bardzo rzadko go ogólnie używam. ;P Tak teraz jakoś użyłem goto xD pzdr


Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 






Również z jednym lub większą ilością słów kluczowych: c++, pomoc, prośba, program, napisaniu, napisanie, problem

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych