[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

kkk123
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 28 lis 2011, o 13:54
Płeć: Mężczyzna
Lokalizacja: wwa
Podziękował: 4 razy

[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

Post autor: kkk123 »

Napisz program, ktory wczytuje ciag liczb calkowitych dodatnich i wypisuje najmniejsza z nich. Decyzje o liczbie elementow ciagu podejmuje uzytkownik: gdy chce zakonczyc podawanie danych wpisuje 0. Uzytkownik powinien moc poprawic kazda blednie wprowadzona dana (bez zaczynania od poczatku).


nie oczekuje od Was gotowego kodu, tylko pomoc.

Chce to zrobic w petli while, ktora zamieszczam nizej. Tylko jak zrobic by program oddzielal liczby podawane przez uzytkownika poprzez przecinek?

Wybranie z nich najmniejszej nie bedzie juz wielkim problemem. Najwiecej trudu sprawia ta zagwostka o dowolnej ilosci liczb przez uzytkownika i rozdzielenie ich.

Kod: Zaznacz cały

while ((scanf("%d", &liczba)!=1) || (znak != ',') || (znak != '0') || (getchar()!='\n') ){
        printf("\nPodales bledne dane. Sprobuj jeszcze raz:");

    if (znak == ','){ // powinien program ogarnac ze musi wczytywac kolejna liczbe
       ;
    }

    else if (znak == '0'){
        printf("Najmniejsza z podanych liczb to: %d", liczba);
        printf("Koniec programu.");
        return 0;
}
Xitami

[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

Post autor: Xitami »

kulawe ale czasem wystarczające:

Kod: Zaznacz cały

while(1) {
    if( 1>scanf("%d", &n) ) 
        (void)getchar();
    else {
        if( n==0 ) break;
        ...
    }
}
Ostatnio zmieniony 28 lis 2011, o 17:04 przez Xitami, łącznie zmieniany 1 raz.
kkk123
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 28 lis 2011, o 13:54
Płeć: Mężczyzna
Lokalizacja: wwa
Podziękował: 4 razy

[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

Post autor: kkk123 »

dlaczego znajduje sie tam void i break?

funkcja if w jezyku C nie posiada breaka. podobnie pierwszy raz widze void(getchar)
Xitami

[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

Post autor: Xitami »

Kod: Zaznacz cały

while(1) {
   if( 1>scanf("%d", &n) ) 
        (void)getchar();
    else {
        if( n==0 ) break;
        ...
   }
}
wiersz:
1 - pętla kręci się w nieskończoność
2 - próba odczytania liczby
3 - jeżeli się nie udało połknięcie jednego znaku, np. przecinek, koniec wiersz, nie cyfra...
(void) możesz wyrzucić, ale kompilator będzie kręcił nosem, że nic nie robisz z tym co dostarczyło getchar()
4 - a gdy się udało
5 - sprawdzamy czy to było zero, jeżeli tak to zrywamy pętlę, break nie dotyczy if tylko pętli (tu while)
6 - tu miejsca na jakieś zabawy z "n" (sprawdzamy czy aby nie mniejsze od liczb wcześniejszych...
9 - dopiero po wyjściu z pętli możesz pokazać najmniejszą liczbę
kkk123
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 28 lis 2011, o 13:54
Płeć: Mężczyzna
Lokalizacja: wwa
Podziękował: 4 razy

[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

Post autor: kkk123 »

no dobra, ale tak czy siak jak zadeklarowac to, ze uzytkownik podaje najpierw liczbe argumentow jaka chce podac, a pozniej program to "wyłapuje" poprzez oddzielenie przecinkami?

-- 28 lis 2011, o 20:26 --

Kod: Zaznacz cały

  printf("Ile chcesz podac liczb?\n\n");

    while ((scanf ("%d", &n)!=1) || (getchar()!='\n')){
    printf("Podales bledne dane. Sprobuj jeszcze raz:");

    while (getchar()!='\n')
     ;
     }

   printf("Podaj dowolna ilosc liczb calkowitych dodatnich (poprzedzone przecinkami):\n\n");

   while ((scanf("%d", &liczba)!=1) || (znak != ',') || (znak != '0') || (getchar()!='\n') ){
        printf("\nPodales bledne dane. Sprobuj jeszcze raz:");

    if (znak == ','){
        printf("adasdasad");
    }

    else if (znak == '0')
        break;

    }

}

dobra cos takiego mam, jak teraz zrobic zeby program "rozumial" ten przecinek?
Xitami

[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

Post autor: Xitami »

Kod: Zaznacz cały

int getint(){
        int n;
        while( 1 > scanf("%d", &n) )
                getchar();
        return n;}      
 
main(){
        int n, i;
        do      n= getint();
        while( n<1 );
        while( n-- ) {
                i= getint();
                if( i==0 ) break;
                printf("%d ", i);}}
wejście:

Kod: Zaznacz cały

a,b:-1,3,1
18, a;8
wyjście

Kod: Zaznacz cały

1 18 8 
kkk123
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 28 lis 2011, o 13:54
Płeć: Mężczyzna
Lokalizacja: wwa
Podziękował: 4 razy

[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

Post autor: kkk123 »

czemu deklarowales int getint przed mainem?!
Xitami

[C] Wczytywanie dowolnej ilości liczb poprostu nie działa.

Post autor: Xitami »

żeby kompilator gdy dojdzie do main wiedział o co mi chodzi

nie ma obowiązku tworzenia prototypów funkcji (chyba, że inaczej się nie da).
ODPOWIEDZ