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

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;
}
	
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");
}
0

Program musi być w funkcji switch

1
switch (abs(x) % 2) {
  case 0:
    printf("X is even");
    break;

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

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

1

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

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."

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;
	}
}
0

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

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ć.

0

ok dzięki za pomoc

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