Wątek przeniesiony 2018-11-15 13:44 z C/C++ przez furious programming.

Program ustalający czy liczba jest parzysta lub nieparzysta z zabezpieczeniem przed nieprawidłowymi znakami

2018-11-15 11:30
0

witam mam problem z ustaleniem warunków dla zmiennej k aby program poprawnie działał, póki co dla dodatnich wartości wszystko śmiga ale dla ujemnych wywala incorrect input, program musi być w funkcji switch, oto program:

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
    int X;
    printf("Podaj liczbe: ");
    int c=!scanf("%d" , &X);
    int k=(c<<2)+(X%2)+((2*X+1)>0);
    switch(k)
    { case 1:
        printf("X is even");
        break;
      case 2:
        printf("X is odd");
        break;
            default:
                printf("Incorrect input\n");
                return 1;
    }

    return 0;
}
edytowany 3x, ostatnio: furious programming, 2018-11-15 14:45
(c<<2)+(X%2)+((2*X+2)>0) co to za potworek? - Patryk27 2018-11-15 11:30
właśnie z tymi warunkami mam problem nie wiem jak je ułożyć - Adam2213 2018-11-15 11:31

Pozostało 580 znaków

2018-11-15 11:31
1
int x;

if (!scanf("%d", &x)) {
  printf("Error: invalid number.");
  return 1;
}

if (abs(x) % 2 == 0) {
  printf("X is even");
} else {
  printf("X is odd");
}

edytowany 4x, ostatnio: Patryk27, 2018-11-15 11:32

Pozostało 580 znaków

2018-11-15 11:32
0

Program musi być w funkcji switch

switch to konstrukt języka, nie funkcja. - Patryk27 2018-11-15 11:34

Pozostało 580 znaków

2018-11-15 11:34
1
switch (abs(x) % 2) {
  case 0:
    printf("X is even");
    break;

  default:
    printf("X is odd");
}

Pozostało 580 znaków

2018-11-15 11:34
0

tutaj jest lepiej ale muszę mieć też zabezpieczenia przed wpisywanie liter

Pozostało 580 znaków

2018-11-15 11:36
1

no to zrób drugiego switcha na scanf()...


Pozostało 580 znaków

2018-11-15 11:37
0

sorki że wcześniej nie podałem ale wymagany jest jeden switch: "Napisz program, który pobierze od użytkownika liczbę całkowitą X, a następnie wyświetli komunikat postaci: "X is odd", w przypadku, gdy liczba będzie nieparzysta; "X is even", w przypadku, gdy liczba będzie parzysta lub "incorrect input" w przypadku podania błędnych danych przez użytkownika. Zamiast X należy podstawić wartość wprowadzonej liczby. W programie nie używaj instrukcji warunkowej if. W programie wolno użyć tylko jednej instrukcji switch. W przypadku wprowadzenia przez użytkownika błędnych danych program powinien zakończyć się kodem błędu 1."

Pozostało 580 znaków

2018-11-15 11:41
1

Prosz:

#include <stdio.h>
#include <stdlib.h>

void printIsEven(void) {
    printf("Number is even.");
}

void printIsOdd(void) {
    printf("Number is odd.");
}

int main(void) {
    void (*prints[])(void) = { printIsEven, printIsOdd };

    int n;

    switch (scanf("%d", &n)) {
        case 1:
            (*prints[abs(n) % 2])();
            return 0;

        default:
            return 1;
    }
}

edytowany 2x, ostatnio: Patryk27, 2018-11-15 11:42
Można także np. użyć ternary operator albo sprytnie wykorzystać short-circuit evaluation. - Patryk27 2018-11-15 11:42

Pozostało 580 znaków

2018-11-15 11:46
0

Dzięki wszystko śmiga tylko brak na początku tekstu zachęty jak go tam wcisnąć?

Pozostało 580 znaków

2018-11-15 11:49
1

Inny, mniej zaplątany przykład:

#include <stdio.h>
#include <stdlib.h>

int printParity(int *n) {
    switch (abs(*n) % 2 == 0) {
        case 0:
            printf("Number is even.");
            break;

        default:
            printf("Number is odd.");
    }

    return 1;
}

int main(void) {
    int n;

    return !(scanf("%d", &n) && printParity(&n));
}

brak na początku tekstu zachęty

W treści polecenia nie ma nic o tekście zachęty; tym niemniej: pomyśl i spróbuj sam go dorzucić.


edit: nie zarejestrowałem fragmentu wspominającego o tym, aby wypisywać incorrect input (w zamian zwracam za to odpowiedni kod błędu) - pokombinuj sam, jak zmodyfikować aplikację do tego. - Patryk27 2018-11-15 11:51

Pozostało 580 znaków

2018-11-15 11:53
0

ok dzięki za pomoc

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0