Avatar
marek.vlcko
Člen
Avatar
marek.vlcko:

Zdravím,
prosím vás, chcel by som aby užívateľ mohol zadávať v programe iba čísla. Keď zadám ľubovoľný znak, spustí sa mi nekonečná slučka.

switch (v)
        {
                case 1: v = 0;
                        break;
                case 2: v = 1;
                        break;
                case 3: v = 2;
                        break;
                case 4: v = 3;
                        break;
                case 5: v = 4;
                        break;

        }

Neviem ako zapísať tento podmienkový príkaz

 
Odpovědět 11.4.2013 8:10
Avatar
Kit
Redaktor
Avatar
Odpovídá na marek.vlcko
Kit:

Ten switch nekonečnou smyčku nezpůsobí.

Nahoru Odpovědět 11.4.2013 9:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na marek.vlcko
Lukáš Hruda (Luckin):

Spíš bude problém ve vstupu. Tenhle kus kódu nám není moc platný.

 
Nahoru Odpovědět 11.4.2013 11:35
Avatar
marek.vlcko
Člen
Avatar
marek.vlcko:

viem, mam tam while(1). Ide mi len o to, ci existuje sposob ako vyradit zadavanie znakov z klavesnice. Chcem, aby bralo len cisla

 
Nahoru Odpovědět 11.4.2013 12:04
Avatar
Odpovídá na marek.vlcko
Lukáš Hruda (Luckin):

Můžeš na vstupu testovat, jestli jsi opravdu zadal číslo, a pokud ne, tak programu nastavíš nějaké adekvátní chování.

 
Nahoru Odpovědět 11.4.2013 12:38
Avatar
Odpovídá na marek.vlcko
Libor Šimo (libcosenior):
#include <stdio.h>
 int main()
 {
    int v;

    if (scanf("%d", &v)) {
    switch (v)
        {
                case 1: v = 0;
                        break;
                case 2: v = 1;
                        break;
                case 3: v = 2;
                        break;
                case 4: v = 3;
                        break;
                case 5: v = 4;
                        break;
        }
    }
    else {
        printf("Spustam nekonecny cyklus!\n");
        for(;;)
           ;
    }
    return 0;
}

Proces ukončíš dvojklikom ctrl+c.

Editováno 11.4.2013 14:23
Nahoru Odpovědět 11.4.2013 14:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):

Takto to bude lepšie:

#include <stdio.h>
 int main(void)
 {
    int v;

    do {
    switch (v)
        {
                case 1: v = 0;
                        break;
                case 2: v = 1;
                        break;
                case 3: v = 2;
                        break;
                case 4: v = 3;
                        break;
                case 5: v = 4;
                        break;
                default:
                        continue;
        }
    } while (scanf("%d", &v));
    printf("Spustam nekonecny cyklus!\n");
    while (1)
        ;
    return 0;
}
Nahoru Odpovědět 11.4.2013 14:32
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Lukáš Hruda (Luckin):

Tohle bych nedělal. Ten cyklus se provede minimálně jednou úplně zbytečně. Tuším, že tu nekonečnou smyčku tam mít nechtěl.

int main()
{
  int v;
  short int running = 1;
  while(running)  //dokud je running 1, cyklus probiha
  {
    if(scanf("%d",&v))  //otestuje zda je spravny vstup
    {
      //program neco udela s daty
    }
    else
    {
      printf("chyba\n");
      getchar();  //nutne, jinak znak zustane na vstupu a program se zacykli
    }
  } //pro ukonceni cyklu musi byt hodnota promenne running nastavena na 0
}
 
Nahoru Odpovědět 11.4.2013 15:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.