Liczenie pola i obwodu koła o promieniu r oraz powtórne wprowadzanie zmiennej r w przypadku błędu

0

witam mam napisać program liczący pole i obwód koła o promieniu r, który każe powtórnie wprowadzać źle wpisaną zmienną, jednak nie wiem jak zapisać kod nakazujący powtórnie wprowadzić dane a mój program pokazuje zawsze 0 bez względu na wprowadzone dane.
EDIT. Dobra poprawiłem teraz zaczął liczyć ale nie wywala dalej błędu jak wprowadzam np. literkę no i nie wiem dalej jak zrobić żeby po wpisaniu złej danej tekst proszący o zmienną wyświetlił się ponownie i żebym mógł znowu wpisać zmienną.

#include <stdio.h>
#include <stdlib.h>
#define PI 3.14159265358979323846
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
	double r;
  
	printf("Podaj promien kola: ");
	if(scanf("%lf" , &r) !=1 && r<0){
		printf("Incorrect input");
    return 1;
	}else{
double p=PI*r*r;
	double o=2*PI*r;
		printf("Obwod kola: %.3lf " , o);
		printf("Pole kola: %.3lf " , p);
	}
	
	return 0;
}
0

zmień

scanf("%lf" , &r) !=1 && r<0

na:

scanf("%lf" , &r) !=1 || r<0
0

Rzeczywiście popełniłem tu banalny błąd, więc zostało tylko ponowne proszenie o zmienną w przypadku gdy wpiszemy błędne dane, ktoś ma pomysł?

0

Jeśli chcesz powtarzać jakąś czynność, to zwykle dobrym wyborem jest użycie pętli (np. while).

0

Nie mogę tego ogarnąć zrobiłem tak:

#include <stdio.h>
#include <stdlib.h>
#define PI 3.14159265358979323846
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
	double r;
  while(r>0){
	printf("Podaj promien kola: ");
	if(scanf("%lf" , &r) !=1 || r<0){
		printf("Incorrect input");
    return 1;
  } 
	}else{
    double p=PI*r*r;
	double o=2*PI*r;
		printf("Obwod kola: %.3lf " , o);
		printf("Pole kola: %.3lf " , p);
	}
  
	return 0;
}

Ale wywala błąd że przed else nie było IFa, a jak zamykam na końcu to mam nieskończoną pętlę, dodatkowo nie mam w while warunku żeby się kończył po wprowadzeniu cyfry.

0

Wyrzuca błąd, ponieważ else musi być zaraz po if'ie. W Twoim przypadku if jest w pętli, a else już nie. Jako, że pętla będzie pytać aż do skutku, można założyć że po niej będziesz miał już poprawne dane. W takim wypadku else po pętli nie będzie potrzebny.

Jeśli chodzi o warunek zakończenia pętli, to możesz wykorzystać słowo kluczowe break podczas sprawdzania poprawności wprowadzanych danych. Czyli jeśli użytkownik wprowadził poprawne dane, to wychodzi z pętli. Jako, że teraz nie chcesz kończyć programu przy podaniu złych danych wejściowych, powinieneś pozbyć się również return 1;.

Ostatnia uwaga. Przy pierwszej iteracji pętli zmienna r nie jest zainicjalizowana, więc przy porównaniu r>0 nie wiadomo co się stanie. Możesz nadać jej jakąś ujemną wartość początkową, albo użyć pętli do while.

0

Nadałem -1 i teraz mi od razu wynik podaje, nie zważając na IFa.

#include <stdio.h>
#include <stdlib.h>
#define PI 3.14159265358979323846
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
	double r;
  r= -1;
  while(r>0){
	printf("Podaj promien kola: ");
	if(scanf("%lf" , &r) !=1 || r<=0){
		printf("Incorrect input");
  }  
	}
    double p=PI*r*r;
	double o=2*PI*r;
		printf("Obwod kola: %.3lf " , o);
		printf("Pole kola: %.3lf " , p);
	
  
	return 0;
}
0

Warunek w while raczej nie wyraża tego, co chcesz. Pętla powinna się powtarzać dopóki zmienna r nie będzie miała poprawnej wartości. Ty ją w tej chwili powtarzasz dla r>0, czyli przerwie się jak użytkownik poda błędną wartość. Warunek powinien być na odwrót.

0

Spróbuj tak:

#include <stdio.h>
#include <stdlib.h>
#define PI 3.14159265358979323846
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
int main() {
    double r = -1.0;
 
    printf("Podaj promien kola: ");
    while(scanf("%lf" , &r) !=1 || r<0)
    {
        printf("Incorrect input. ");
        printf("Podaj promien kola: ");
    }
        
    double p=PI*r*r;
    double o=2*PI*r;
    printf("Obwod kola: %.3lf " , o);
    printf("Pole kola: %.3lf " , p);
   
 
    return 0;
}
0

Twój program działa w przypadku dobrych danych, ale jak wpisze się złą to zamiast poprosić o nową daną to wyświetla nieskończony incorrect inputpodaj promien kola

0

https://wandbox.org/permlink/RxKybUZKJCHP07nI

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

int main(void)
{
    while (1) {
        double r;
        printf("Podaj promien:");
        int read = scanf("%lf", &r);
        while (read == 0) {
            scanf("%*[^\n] ");
            printf("Podaj ponownie promien:");
            read = scanf("%lf", &r);
        }
        if (read == EOF) {
            break;
        }
        printf("R = %lf  S=%lf   L=%lf\n", r, r * r * M_PI, 2 * M_PI * r);
    }
    
    return EXIT_SUCCESS;
}

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