Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
marek.vlcko
Člen
Avatar
marek.vlcko:11.4.2013 8:10

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:11.4.2013 9:09

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):11.4.2013 11:35

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:11.4.2013 12:04

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):11.4.2013 12:38

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):11.4.2013 14:21
#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):11.4.2013 14:32

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):11.4.2013 15:01

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.