Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako se ograditi od pogresno unetih izbora u konzoli c programiranja

[es] :: C/C++ programiranje :: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja

[ Pregleda: 1955 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

The programmer
Veljko Škoric
Studiram informacione tehnologije
Studiram
Zemun, Srbija

Član broj: 336855
Poruke: 1
*.dynamic.sbb.rs.



Profil

icon Kako se ograditi od pogresno unetih izbora u konzoli c programiranja06.06.2017. u 10:12 - pre 33 meseci
Korisnik ima na pocetku slobodan izbor programa unosom rednog broja 1 ili 2. Ako korisnik unese bilo sta drugo treba ispisati "Greska pri unosu" i vratiti se na main();
Imam problem kada unesem bilo koje slovo ili karakter program takoreci zabode to jest ponavlja ispisivanje, brisanje i vracanje na main() u beskonacnosti.
Kada deklarisem promenljivu za unos da je celi broj onda mi 1 i 2 radi ali kada stavi da je promenljiva x karakter onda se ne moze dalje u izvrsavanje prve i druge funkcije.

Kako da se ogradim tako da šta god korisnik uneo, a da nije 1 ili 2 da mu ispiše grešku i da se vrati na početak programa?

Code:
main()
{
   int x;
   printf("\n\t Izaberite opciju unosom rednog broja\n\n");
   printf("\n\n\t\t 1. Ucenik\n");
   printf("\n\t\t 2. Predmet");
   printf("\n\n\t\t >> ");
   scanf("%d",&x);
   switch(x)
   {
       case 1:
           evidentiranje(x);
           break;
       case 2:
           funkcija2(x);
           break;
       default:
        printf("\n\t\t Greska pri unosu!\n\n\t\t");
        system("pause");
        system("cls");
        return main();
   }



[Ovu poruku je menjao X Files dana 06.06.2017. u 22:23 GMT+1]
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 3763
*.bvcom.net.



+832 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja06.06.2017. u 18:24 - pre 33 meseci
Prvo inkluduj sve sto je potrebno, implicitne deklaracije donose iznenadjenja. main ti nije pravilno definisan i nauci petlje umesto da rekurzivno zoves main. scanf ne skida karakter kad naleti na gresku tako da kad god dalje pozivas scanf on pokusava jedan te isti karakter da konvertuje
i tako u beskonacnost. dakle pozovi getchar umesto system("pause") i radice ti koliko toliko.
press any key to continue or any other to quit....
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 5825

Sajt: pedja.supurovic.net


+1384 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja06.06.2017. u 21:12 - pre 33 meseci
Uvedi opciju 0 (nula) za izlazak iz programa.


 
Odgovor na temu

dmilicev
Dragan Milicev

Član broj: 3501
Poruke: 10
*.dynamic.sbb.rs.



+1 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja12.07.2017. u 21:08 - pre 31 meseci
Code:
/*
    Sablon za meni.
*/

#include <stdio.h>


// Unosi integer i smesta ga u broj. Vraca 1 ako jeste integer, 0 ako nije.
int input_int( int *broj )
{
    char ch;

    fflush(stdin);  // prazni bafer

// Funkcija scanf() vraca broj uspesno ucitanih podataka.
// Na sledeci nacin zahtevamo da se unese integer pracen enter-om :
    if( scanf("%d%c", broj, &ch) != 2 || ch != '\n' ){
//        printf("\n\n Greska ! \n\n");
        return 0;
    }
    else{
//        printf("\n\n Unet je integer pracen enter-om.  \n\n");
//        printf("\n\n Uneli ste broj: %d", *broj );
        return 1;
    }
}


void funkcija_1(void)
{
    printf("\n Izabrali ste funkcija_1. \n");
}

void funkcija_2(void)
{
    printf("\n Izabrali ste funkcija_2. \n");
}

void funkcija_3(void)
{
    printf("\n Izabrali ste funkcija_3. \n");
}

void funkcija_4(void)
{
    printf("\n Izabrali ste funkcija_4. \n");
}

void funkcija_5(void)
{
    printf("\n Izabrali ste funkcija_5. \n");
}

void meny(void)
{
    int izbor, kraj=0, br;

    while(!kraj){
//        system("CLS");

 printf("\n\n +-------------------------------------------------------+ \n"
            " |                                                       | \n"
            " |      GLAVNI MENI                                      | \n"
            " |                                                       | \n"
            " +-------------------------------------------------------+ \n"
            " |                                                       | \n"
            " |  1 - izbor_1                                          | \n"
            " |                                                       | \n"
            " |  2 - izbor_2                                          | \n"
            " |                                                       | \n"
            " |  3 - izbor_3                                          | \n"
            " |                                                       | \n"
            " |  4 - izbor_4                                          | \n"
            " |                                                       | \n"
            " |  5 - izbor_5                                          | \n"
            " |                                                       | \n"
            " |  0 - Kraj rada                                        | \n"
            " |                                                       | \n"
            " +-------------------------------------------------------+ \n"
        );

        printf("\n\t Izbor: (0-5): ");

//        scanf("%d", &izbor);              // Ovde pada program ako se ne unese integer.

//        input_int(&izbor);                // Moze ovako, unosi se samo integer,


        while( input_int(&izbor) == 0 ){    // ali je bolje ovako.
            printf("\n\n \t Morate izabrati (0-5) ! \n\n");
            printf("\n\t Izbor: (0-5): ");
        }

        switch(izbor){
            case 1:                     // izbor_1
                    funkcija_1();
                    break;
            case 2:                     // izbor_2
                    funkcija_2();
                    break;
            case 3:                     // izbor_3
                    funkcija_3();
                    break;
            case 4:                     // izbor_4
                    funkcija_4();
                    break;
            case 5:                     // izbor_5
                    funkcija_5();
                    break;
            case 0:                     // Kraj rada
                    kraj = 1;
                    break;
            default :
                    printf("\n\n \t Morate izabrati (0-5) ! \n\n");
                    break;
        }
    }
}



int main(void)
{

    meny(); // pozivamo glavni meni


    return 0;
}
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 3763
*.bvcom.net.



+832 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja13.07.2017. u 09:24 - pre 31 meseci
Ne kapiram sta si drugacije uradio od originalnog postera posto se program i dalje vrti u mrtvoj petlji a ko se ne unese broj ;p
press any key to continue or any other to quit....
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 5825

Sajt: pedja.supurovic.net


+1384 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja13.07.2017. u 09:36 - pre 31 meseci
I treba da se vrti u petlji dok se ne izabere odgovarajuća opcija. Dodao je novu opciju 0 za izlazak iz programa. Stoga to nije mrtva petlja.

 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 3763
*.bvcom.net.



+832 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja13.07.2017. u 09:39 - pre 31 meseci
Jesi ga bas ubo ko prstom u nesto. Probaj program unesi slovo pa reci to isto, ponovo. Ocigledno je da ovde niko ne razume u cemu je problem iako sam jasno napisao.
press any key to continue or any other to quit....
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 5825

Sajt: pedja.supurovic.net


+1384 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja13.07.2017. u 23:34 - pre 31 meseci
Zanimljivo je kako si brzo prešao na sočan rečnik smao zato što ne umeš d aobjasniš to što hoćeš da kažeš.

Ja ne radim u ovom jeziku (liči na c, verovatno c++) i nemam gde da pokrenem progrm ali koliko ja vidim, postoji provera dali je unet broj tako da ako korisnik unese slovo program ga pomene da unese broj. To je sasvim ok.

Ako korsinik unese broj, onda progrmaproverava da li je broj neka od opcija. Ako je opsija pokreneopciju a ako jenula, izadje iz programa. opet, kako treba.

Ako ti milsiš da tu nešto ne valja onda odvoj malo vremena da dobro razmisliš o tome i da napišeš komentar koji jasno objašnjava to što milsiš da kažeš. Pametovati može svako.

 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 3763
*.bvcom.net.



+832 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja13.07.2017. u 23:55 - pre 31 meseci
Predraze, programiranje je egzaktno, nema tu filozofije. Ako kazem da program ulazi u mrtvu petlju onda sam to verovatno i *proverio*. Iako sam napisao da je to zbog toga sto scanf *ne ekstraktuje karakter* u slucaju greske ipak sam proverio. Dakle *mora da se pozove funkcija koja ekstraktuje karakter* nakon greske inace ce scanf samo da ponavlja istu gresku. Jel sad jasno?
Toliko.
press any key to continue or any other to quit....
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 5825

Sajt: pedja.supurovic.net


+1384 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja14.07.2017. u 01:32 - pre 31 meseci
Branimire, ako si našao bag u kodu onda lepo napišeš šta je bag, na kojoj liniji i ponudiš ispravku baga. A ne pametuješ.

Egzaktno.


 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 3763
*.bvcom.net.



+832 Profil

icon Re: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja14.07.2017. u 01:41 - pre 31 meseci
Pa the programmer je nasao bug ja sam napisao kako da popravi bug jednostavnom zamenom system("pause"); sa getchar();. A mislim da ti pametujes, zato sto pricas napamet. I sad mene optuzujes za pametovanje?
press any key to continue or any other to quit....
 
Odgovor na temu

[es] :: C/C++ programiranje :: Kako se ograditi od pogresno unetih izbora u konzoli c programiranja

[ Pregleda: 1955 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.