IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Kubas129
Člen
Avatar
Kubas129:28.10.2018 15:45

ahoj,
můžu ještě poprosit o kus kodu na ošetření vstupu
potřeboval bych, když vložím do konzole: 1 2
3 abcd
aby se hned vypsala věta: nespravny vstup

 
Odpovědět
28.10.2018 15:45
Avatar
Kubas129
Člen
Avatar
Kubas129:28.10.2018 15:50

zjednodušeně řešeno:
Bod B: se nesmí vypsat, pokud jsem zadal špatně data do bodu A

 
Nahoru Odpovědět
28.10.2018 15:50
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Kubas129
Ondřej Štorc:28.10.2018 16:29

To jsi se s řešením DU na FITu moc nenadřel... Jinak máš špatně tu podmínku. Ve scanf načítáš dvě hodnoty, ale to podmínka tomu vůbec neodpovídá:

if(scanf(" %lf %lf", &a, &b) != 2)
{
        // Pokud jsi zde, tak se nenačetly dvě hodnoty...
}
Nahoru Odpovědět
28.10.2018 16:29
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Kubas129
DarkCoder:28.10.2018 16:52

Mnohem lepší způsob než deklarovat několik dvouprvkových polí je vytvořit si tříprvkové pole struktůr se dvěma členy (int nebo double dle tvé potřeby). Důvodem je mnohem lepší čitelnost toho s čím aktuálně pracuješ.

Dále pokud očekávám na vstupu zadání dvou hodnot, nebudu chtít, aby mi uživatel zadal hodnoty čtyři. Funkce scanf() vrací počet úspěšně načtených členů a tedy pokud očekávám dva, porovnávám návratovou hodnotu s hodnotou 2. Ukončovat program když není vstup správně zadán je trochu drastická metoda. Mnohem lepší by bylo hodnotu načítat v do-while cyklu a využívat řídící příkaz continue. Když už ukončuješ program při chybě, používej funkci exit() nikoli return.

Jinak testování návratové hodnoty funkce scanf() je chybně, jak už zde bylo řečeno v předchozím příspěvku. Zápis, který máš jsem už viděl ve tvém jiném vláknu a je chybný.To co provádíš je test na 0 nikoli na počet úspěčně vrácených členů. Výraz v tvém případě se vyhodnocuje v pořadí negace následovaná rovností. Pro nerovnost se používá relační operátor !=.

Nahoru Odpovědět
28.10.2018 16:52
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Matúš Olejník:28.10.2018 17:22

Presne tak už včera riešil inú vec a mal tam presne toto isté a nepoužil nič z odporúčaní, asi je zbytočné sa snažiť :)

Nahoru Odpovědět
28.10.2018 17:22
/* I am not sure why this works but it fixes the problem */
Avatar
Kubas129
Člen
Avatar
Kubas129:28.10.2018 17:37

aha diky
ale s tím cyklem do while, to moc nechápu, že to bych musel mít asi deklarovaný jenom jedno pole s 12 prvky
a s tím do while to myslíš nějak takto?
int =0;
do{
nacti hodnotu do pole[i]
i++;
}while(i==11)

 
Nahoru Odpovědět
28.10.2018 17:37
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Matúš Olejník
DarkCoder:28.10.2018 17:47

Jedna drobná odlišnost tam přeci jenom je. Ve vláknu, kde použil obdobný tvar, se "nerovnost" vztahovala k prvku pole do kterého měla být hodnota načtena. Tam to bylo úplně nesmyslné. Zde je to jiné, "nerovnost" se vztahuje k návratové hodnotě funkce scanf(), což už je správnější. To že byla použita hodnota neodpovídajícímu počtu prvků které se načítají a chybně použitý operátor nerovnosti, už je spíše drobnost daná neznalostí funkce scanf(). Zarážející ale na tom je, že když už byla testována návratová hodnota funkce scanf() na 0, muselo trknout, že se program neustále ukončuje po zadání hodnot před tím, než se načte výzva pro zadání bodu B. Ono pokud compiler vysloveně neohlásí chybu, tak to mnoho dotyčných neřeší a neuvědomující si, že něco v kódu není úplně správně. I varování je důvodem k tomu zvýšit pozornost. Na druhou stranu velice oceňuji, že dotyčný vynaložil úsilí návratovou hodnotu otestovat. Beru to rozhodně pozitivněji, i přes to, že tam byla chyba, než kdyby tak neučinil.

Nahoru Odpovědět
28.10.2018 17:47
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Matúš Olejník:28.10.2018 17:52

Máš pravdu, beriem späť :)

Nahoru Odpovědět
28.10.2018 17:52
/* I am not sure why this works but it fixes the problem */
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Kubas129
DarkCoder:28.10.2018 18:32

Takto:

#include <stdio.h>

#define POINTMAX 3

struct sPoint {
        double x;
        double y;
};

struct sPoint Points[POINTMAX];

int main(void) {
        int i, n;

        printf("Zadani souradnic vsech bodu\n\n");
        for (i = 0; i < POINTMAX; i++) {
                do {
                        printf("Zadej souradnici [X,Y] %d. bodu: ", i + 1);
                        n = scanf("%lf %lf", &Points[i].x, &Points[i].y);
                        fseek(stdin, 0L, SEEK_END);
                        if (n != 2) {
                                printf("Chybna souradnice. Zadejte souradnici znovu.\n\n");
                                continue;
                        }
                } while (n != 2);
        }

        printf("\nVypis souradnic vsech bodu\n\n");
        for (i = 0; i < POINTMAX; i++) {
                printf("%d. bod: [%.2f, %.2f]\n", i+1, Points[i].x, Points[i].y);
        }

        return 0;
}
Nahoru Odpovědět
28.10.2018 18:32
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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 9 zpráv z 9.