Zadanie w C. Pętla while, jak napisać funkcję.

0

Witam.
Ćwiczę posługiwanie się tym językiem. I w zadaniu napotkałem na problem. Ale najpierw przedstawię treść zadania.

"Napisz program, który pobiera wartość temperatury w Fahrenheitach. Program powinien pobierać wartość typu double i przekazywać (jako argument) własnej funkcji użytkownika o nazwie Temperatura(). Funkcja ta powinna obliczyć odpowiednią wartość w skalach Celsjusza i Kelwina, a następnie wyświetlić wszystkie trzy wartości, z zachowaniem precyzji dwóch miejsc po przecinku. Funkcja powinna zwracać każdą wartość ze skali. Funkcja Temperatura() powinna używać słowa kluczowego const lub symboli reprezentujących stałe występujące w powyższych formułach. Natomiast main() powinna stosować pętle, aby umożliwić użytkownikowi wielokrotne zastosowanie funkcji konwertującej. Pętla kończy swój cykl, gdy użytkownik wprowadzi zamiast temperatury - literę k(koniec) lub inną wartość nie będącą liczbą."

Problem mam z ostatnim poleceniem zawartym w dwóch ostatnich zdaniach. Jak mogę je wykonać? Jeżeli zauważyliście jeszcze jakieś pomyłki to dajcie znać.

#include <stdio.h>
void Temperatura(double fahrenheit);

int main(void)
{
    double wejscie;
    printf("Podaj temperature w Fahrenheitach: ");
    scanf("%lf", &wejscie);
    Temperatura(wejscie);

    return 0;
}
void Temperatura(double fahrenheit)
{
    double celsjusz, kelwin;
    const double stala_1 = 1.8, stala_2 = 32.0, stala_3 = 273.16;
    celsjusz = (fahrenheit - stala_2) / stala_1;
    kelwin = celsjusz + stala_3;
    printf("\n%.2lf stopni w skali Fahrenheitach to\n%.2lf stopni Celsjusz i %.2lf stopni Kelwina.\n\n", fahrenheit, celsjusz, kelwin);
} 
0

Hm być może to ci pomoże Zabezpieczenie przed wpisywaniem liter, przy czym zamiast komunikatu błędu trzeba by zrobić wyjście z "funkcji wczytującej". ew zakończyć jakoś program.

0

Oto fragment kodu który spełnia twoje założenia:

 
    double wejscie;

    while(1) {
        printf("Podaj temperature w Fahrenheitach: ");
        if(scanf("%lf", &wejscie) == 0) break;
        else Temperatura(wejscie);
    
    }
    
    return 0;
0

Funkcja if według opracowywania tej książki nie powinna być mi jeszcze potrzebna, a polecenie utworzenia takiej pętli bez użycia if wydaje mi się przesadnie ciężkie. W każdym razie dzięki za podanie możliwości rozwiązania tego problemu.

1

Co za problem, wystarczy ruszyć głową

#include <stdio.h>

void Temperatura(double fahrenheit)
  {
   double celsjusz, kelwin;
   const double stala_1 = 1.8, stala_2 = 32.0, stala_3 = 273.16;
   celsjusz = (fahrenheit - stala_2) / stala_1;
   kelwin = celsjusz + stala_3;
   printf("\n%.2lf stopni w skali Fahrenheitach to\n%.2lf stopni Celsjusz i %.2lf stopni Kelwina.\n\n", fahrenheit, celsjusz, kelwin);
  }

int wprowadz(double *fahrenheit)
  {
    printf("Podaj temperature w Fahrenheitach: ");
    return scanf("%lf",fahrenheit);
  }

int main(void)
  {
   double wejscie;
   while(wprowadz(&wejscie)) Temperatura(wejscie); 
   return 0;
  }
0

Witam. Właśnie trafiłem na to zadanie i kurcze nie bardzo rozumiem o co chodzi w kodzie napisanym przez _13th_Dragon:

int main(void)
  {
   double wejscie;
   while(wprowadz(&wejscie)) Temperatura(wejscie); 
   return 0;
  }

I co daje ta gwiazdka przy fahrenheit?

0

I co daje ta gwiazdka przy fahrenheit?

Tworzy wskaźnik.

0

A może tak

#include <stdio.h>
double Temperatura(double a);
double a;
int main(void)
{
	printf("Cwiczenie 5.8 w jezyku C - autor: xpeye\n\n");
	printf("Podaj wartosc temperatury w Fahrenheitach: ");
	while (scanf("%lf", &a)==1)
	{
		Temperatura(a);
		printf("\nPodaj wartosc temperatury w Fahrenheitach (podaj litere k lub inna wartosc nie bedaca liczba, aby zakonczyc: ");
	}
	printf("Zakonczyles!");
	getchar();
	getchar();
	return 0;
}

double Temperatura(double a)
{
	double c, k;
	const float stala1=1.8;
	const float stala2=32.0;
	const float stala3=273.16;
	c=stala1*a+stala2;
	k=c+stala3;
	printf("%.2f w Farenhaitach to %.2f w Celsjuszach i %.2f  w Kelwinach", a, c, k);
}

dodanie znacznika <code class="c"> - fp

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