Niekończąca się petla while i deklaracja funkcji z char

0
  1. Dlaczego po wpisaniu znaku pod zmienną 'koniec' pętla sie nie kończy tylko zaczyna wykonywać printf w nieskończonosc?
#include <stdio.h>

int main(void) {
    char koniec;
    float suma=0,skladnik;
    printf("Wybierz znak konczacy dzialanie programu: ");
    scanf("%c",&koniec);
    do{
        printf("[Wpisz '%c' by zakonczyc] Podaj skladnik: ",koniec);
        scanf("%f",&skladnik);
        if(skladnik==koniec) break;
        suma+=skladnik;
    }while(1);
    printf("\nSuma= %.3f",suma);
    return 0;
}
  1. Jak definiuje sie funkcję przyjmującą i zwracającą char ( cos w stylu char funkcja(char x1) ?
0

bo pobierasz składnik w pętli pod float i nigdzie nie parsujesz na char

0

scanf("%f",&skladnik); wczytuje tylko liczby, jeśli natrafi na coś co nie jest liczbą zwróci wartość zero i nie ustawi nowej wartości dla skladnik.
Tobie raczej zależało na takiej pętli:

printf("Podaj pierwszy skladnik: ");
while(1==scanf("%f",&skladnik)) {
    ...
    printf("Podaj kolejny skladnik: ");
}

pętlę zakończy cokolwiek co nie może być zinterpretowane jako liczba zmiennoprzecinkowa.

Moja rada, gdy się ma taki problem najpierw najlepiej poczytać jakąś dokuntację tego z czego się korzysta.

0

Wszystko działa tak jak napisałeś: http://ideone.com/S6BvNZ pewnie chodziło ci o to:

for(;;)
  {
   printf("[Wpisz '%c' by zakonczyc] Podaj skladnik: ",koniec);
   if(scanf(" %f",&skladnik)!=1)
     {
      if(getchar()==koniec) break;
      printf("Masz wprowadzić liczbę lub znak '%c' bla bla bla\n",koniec);
     }
   suma+=skladnik;
  }
0

Mialem napisać program wykorzystując do while, także nie moge tego zrobić for'em ;). Ale po zmienieniu warunku :
if(skladnik==koniec) break;
na:
if(getchar()==koniec) break;
Wszystko śmiga jak powinno. Więc dziekuje za pomoc, temat do zamkniecia :)

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