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

Podanie przez uzytkownika liczby naturalnej w pętli, puki nie zostanie podana prawidłowo

Ostatnio zmodyfikowano 2016-12-04 23:09
Autor Wiadomość
KrayteR
Temat założony przez niniejszego użytkownika
Podanie przez uzytkownika liczby naturalnej w pętli, puki nie zostanie podana prawidłowo
» 2016-12-04 22:05:28
Hej! Mam problem z pewnym zadankiem o treści:
Napisz program, który prosi użytkownika o podanie liczby naturalnej. Robi to tak długo, aż dane będą poprawne (tzn. wpisana zostanie liczba naturalna, a później ENTER).

Napisałem już coś takiego, aczkolwiek nie działa, czy jest ktoś w stanie przeanalizować kod i powiedzieć co robię źle?

C/C++
#include <stdio.h> //53
#include <math.h>

int main()
{
    int i; //liczba naturalna podana przez uzytkownika
    printf( "Program prosi po podanie liczby naturalnej tak dlugo puki nie zostanie ona podana\nAutor programu: xxx\n" );
    while( scanf_s( "%d", & i ) != 1 || getchar() != '\n' || i < 0 )
    {
        printf( "Podano bledne dane, sprobuj jeszcze raz\n" );
        i = getchar();
    }
    printf( "Podana liczba to: %d\n", i );
    return 0;
}
P-154511
carlosmay
» 2016-12-04 22:22:49
np.
unsigned int
.

Nie przemyślałem tego.
P-154512
KrayteR
Temat założony przez niniejszego użytkownika
» 2016-12-04 22:36:03
Niewiele to zmieniło, nadal program po wpisaniu np "asdasdas" wypisuje mi "błędne dane" osiem razy a nie raz.
P-154513
carlosmay
» 2016-12-04 22:48:40
Zrekompensuje się i dam ci kod:
C/C++
#include <stdio.h>

void eat_char()
{
    char c;
    while(( c = getchar() ) != '\n' && c != EOF ) { }
}

int main()
{
    int natural_num;
    while( scanf( "%d", & natural_num ) == 0 || natural_num < 0 ) {
        printf( "Niepoprawna wartosc\n" );
        eat_char();
    }
    printf( "%d", natural_num );
}
P-154516
KrayteR
Temat założony przez niniejszego użytkownika
» 2016-12-04 22:52:11
@carlosmay
O ile Twój kod działa doskonale, o tyle nie mogę go użyć, zadanie te jest mi potrzebne na studia i musi być zrobione jak najprościej, coś tak zaawansowanego nie przejdzie :(
P-154517
carlosmay
» 2016-12-04 22:57:55
coś tak zaawansowanego nie przejdzie :(
?

Tam nie ma nic zaawansowanego. No może funkcja, którą napisałem dla wygody.
Możesz instrukcje z funkcji wrzucić do pętli sprawdzającej poprawność danych:
C/C++
int main()
{
    int natural_num;
    while( scanf( "%u", & natural_num ) == 0 || natural_num < 0 ) {
        printf( "Niepoprawna wartosc\n" );
        char c;
        while(( c = getchar() ) != '\n' ) { }
    }
    printf( "%u", natural_num );
}

PS: Zdobywanie wiedzy we własnym zakresie jest karalne?

edit: uprościłem pozbywania się danych.
P-154519
KrayteR
Temat założony przez niniejszego użytkownika
» 2016-12-04 23:09:35
Zdobywanie wiedzy we własnym zakresie nie jest karalne, aczkolwiek używanie jej na sprawdzianach u mojej Pani Profesor już tak :(
Teraz wygląda elegancko, Wielkie dzięki!
P-154520
« 1 »
  Strona 1 z 1