Sprawdzanie, czy liczby są całkowite

0

Wie ktoś, co mam nie tak w tym programie? Po wpisaniu 2 liczb nic się nie wyświetla a nie chcę, aby wartości zmiennych były wypisywane 2 razy.

#include <stdio.h>
int main (void) {
  printf("Zadanie 20.\n\n");
  printf("Autor: Tomasz Sulich\n\n");
  printf("Program sluzy do wypisania dwoch liczb, podanych przez uzytkownika i sprawdzenia, czy sa to liczby calkowite.\n\n");
  double a,b;
  printf("Podaj dwie liczby.\n");
  scanf("%lf \n\n",&a);
  if (a - (int)a == 0)
  {
   printf("a to liczba calkowita.\n");
  }
  printf("a nie jest liczba calkowita.\n");
  scanf("%lf\n\n",&b);
  if (b - (int)b == 0)
    {
      printf("b to liczba calkowita.\n");
      return 0;
    }
    else 
    {
      printf("b nie jest liczba calkowita.\n");
      return 0;
    }
  printf("Wynikiem dzialania programu jest wypisanie dwoch liczb i sprawdzenie, czy sa to liczby calkowite.\n\n ");
  printf("Koniec programu.\n");
  }
0

Dlaczego dwa razy pytasz użytkownika o podanie liczby b?

1

Zdaje się, że Twój kod działa prawidłowo: https://ideone.com/hjoOL4.
W jaki sposób uruchamiasz go lokalnie?

1

Na temat odpowiadaj w postach - komentarze z reguły służą od dyskusji poza głównym tematem :-)

Powinieneś wykorzystywać scanf("%lf",&a); / scanf("%lf",&b);.

0
Patryk27 napisał(a):

Na temat odpowiadaj w postach - komentarze z reguły służą od dyskusji poza głównym tematem :-)

Powinieneś wykorzystywać scanf("%lf",&a); / scanf("%lf",&b);.

A nie wykorzystuję?

0

scanf("%lf \n\n",&a); trochę się jednak różni od scanf("%lf",&a);.

0
Patryk27 napisał(a):

scanf("%lf \n\n",&a); trochę się jednak różni od scanf("%lf",&a);.

W sumie tak :D Dziękuję :)

1

W tej formie to jakoś działa (jak wyżej \n\n WTF?):

#include <stdio.h>
int main (void) {
  printf("Zadanie 20.\n\n");
  printf("Autor: Tomasz Sulich\n\n");
  printf("Program sluzy do wypisania dwoch liczb, podanych przez uzytkownika i sprawdzenia, czy sa to liczby calkowite.\n\n");
  double a,b;
  printf("Podaj dwie liczby.\n");
  scanf("%lf ",&a);
  scanf("%lf",&b);
  if (a - (int)a == 0)
  {
    printf("%lf to liczba calkowita.\n", a);
  }
  else
  {
    printf("%lf nie jest liczba calkowita.\n", a);
  }
  
  if (b - (int)b == 0)
    {
      printf("%lf to liczba calkowita.\n", b);

    }
    else 
    {
      printf("%lf nie jest liczba calkowita.\n", b);
    }
  printf("Wynikiem dzialania programu jest wypisanie dwoch liczb i sprawdzenie, czy sa to liczby calkowite.\n\n ");
  printf("Koniec programu.\n");
  return 0;
  }

Przestudiuj sobie to:
https://stackoverflow.com/questions/5796983/checking-if-float-is-an-integer
Tam są komentarze pod Twoim sposobem.

1

w sekcji if masz return, więc dwa ostatnie printf nigdy nie zostaną wywołane.

0
jvoytech napisał(a):

w sekcji if masz return, więc dwa ostatnie printf nigdy nie zostaną wywołane.

Dziękuję.

0
#include <stdio.h>

int main (void) 
{
	const char *msg[]={"NIE jest","jest"};
	double tb[2];
	int i;
	printf("Podaj dwie liczby: ");
	for(i=0;i<2;++i) scanf("%lf", tb+i);
	for(i=0;i<2;++i) printf("%lf %s liczba calkowita.\n", tb[i], msg[tb[i]==(int)tb[i]]);
	printf("Koniec programu.");
	return 0;
}
0
_13th_Dragon napisał(a):
#include <stdio.h>

int main (void) 
{
	const char *msg[]={"NIE jest","jest"};
	double tb[2];
	int i;
	printf("Podaj dwie liczby: ");
	for(i=0;i<2;++i) scanf("%lf", tb+i);
	for(i=0;i<2;++i) printf("%lf %s liczba calkowita.\n", tb[i], msg[tb[i]==(int)tb[i]]);
	printf("Koniec programu.");
	return 0;
}

Dobrze wiedzieć, że można to zrobić inaczej, ale na tym etapie nie mieliśmy jeszcze pętli :) Tylko.. Co to za twór w pierwszej linii maina? Nie kojarzę go.

2

Wersja z naciskiem na czytelność:

#include <stdio.h>

int isInteger(double x)
{
  return x == (int)x;
}

void printIsInteger(double x, const char* desc)
{
  printf("%s %sjest całkowita\n", desc, isInteger(x)?"":"nie ");
}
int main(void)
{
    double a, b;
    int cout;
    printf("Podaj dwie liczby.\n");
    cout = scanf("%lf%lf", &a, &b);
    if (cout > 0) {
        printIsInteger(a, "a");
    }
    if (cout > 1) {
        printIsInteger(b, "b");
    }
    
    return 0;
}

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