Przekroczony czas, why?

0
#include<stdio.h>
main(){
       float a, b, c;
       while(scanf("%f %f %f", &a, &b, &c)){
       switch(int(a)){
       case 0:
       if(b==-c) printf("NWR\n");
       else printf("BR\n");
       continue;
       default:
       printf("%.2f\n", (c-b)/a);
       }
       }
}

Hmm... nie wiem dlaczego wyświetla mi się przekroczony czas?

0

rofl... ale gdzie Ci wyświetla ten przekroczony czas? na SPOJ'u? Co to za zadanie?

0

Na razie nie przejmuj się przekroczonym czasem... Twój kod podaje błędny wynik już dla pierwszego przykładu... instrukcja switch tu się nie nadaje(ponieważ przyjmuje int, a nie float)

Dodatkowo, żeby nie dawać Ci rozwiązania(bo chyba nie o to tu chodzi): przeczytaj dokumentacje funkcji scanf, masz nie do końca poprawny warunek w while(to powoduje przekroczenie czasu)

0

Tak trudno formatować kod jak człowiek?

#include<stdio.h>
int main()
{
    float a, b, c;
    while(scanf("%f %f %f", &a, &b, &c))
    {
        switch(int(a))
        {
        case 0:
            if(b==-c) 
              printf("NWR\n");
            else 
              printf("BR\n");
            continue;
        default:
            printf("%.2f\n", (c-b)/a);
        }
    }
}

scanf() zwraca ci ilość dopasowanych argumentów...

0
#include<stdio.h>
main(){
    float a, b, c;
    while(EOF){
        scanf("%f %f %f", &a, &b, &c);
            if(a==0 && b==c) 
              printf("NWR\n");
            else if(a==0 && b!=c)
              printf("BR\n");
            else
              printf("%.2f\n", (c-b)/a);
    }
}

Wciąż przekroczony czas :?:

0

A co niby ma znaczyć while(EOF) ?EOF to jest pewne makro/stała i jego wartość się nie zmieni choćby nie wiem co... Może chciałeś napisać while(STDIN) ?
Weź z łaski swojej odpalaj te kody lokalnie na swoim kompie i zobaczysz co się dzieje. Najlepiej zapoznaj sie z debuggerem, bo tylko zaśmiecasz forum...

0

Po kiego kilka razy sprawdzać ten sam warunek?

#include<stdio.h>
int main()
  {
   float a, b, c;
   while(scanf("%f%f%f",&a,&b,&c)==3)
     {
      if(a) printf("%.2f\n",(c-b)/a);
      else if(b==c) printf("NWR\n");
      else printf("BR\n");
     }
   return 0;
  }
0

Teraz już kapuje co źle zrobiłem. Dzięki serdeczne!
Nie czaje tylko jednej rzeczy scanf("%f%f%f",&a,&b,&c)==3 dlaczego to przyrównałeś do trzy?

0

Dzięki, juz mniej więcej kapuje. A co się dzieje kiedy nie będzie ...==3?

0
GUBBI napisał(a)

Dzięki, juz mniej więcej kapuje. A co się dzieje kiedy nie będzie ...==3?

Dzieje się wtedy tyle:

return 0;
0
Sarrus napisał(a)
GUBBI napisał(a)

Dzięki, juz mniej więcej kapuje. A co się dzieje kiedy nie będzie ...==3?

Dzieje się wtedy tyle:

return 0;

Mylisz się, wtedy pętla nigdy się nie kończy, ponieważ po natrafieniu na koniec pliku scanf zwraca EOF. EOF (przynajmniej w visual'u) jest zdefiniowany jako -1 czyli prawda -> warunek w pętli po natrafieniu na EOF zawsze będzie spełniony.

0

Input
W pojedyńczej linii podane są trzy liczby rzeczywiste zaokrąglone do drugiego miejsca po przecinku.

W treści zadania jest napisane że na wejściu są tylko 3 liczby. Można (a nawet trzeba) że będą tylko 3, więc nie ma sensu sprawdzać czy doszło do końca, czy też kontrolować błędy.

0

byku_guzio: to będzie while (-1 == 3) { ... }...

0

Czyli mam rozumieć, że pętla będzie się wykonywała dopóty, dopóki argumenty scanf() będą równe 3?

0

Nie, dopóty, dopóki scanf będzie zwracał wartość 3, czyli uda mu się pobrać 3 wartości. google i dokumentacja nie gryzą

0

Aha. Czyli jak scanf() nie będzie przyrównywało 3 to jest to równoznaczne ze scanf()==EOF i tzn. scanf()==-1, i tzn. pętla wykonuje się w nieskończoność, dobrze myśle?

0

Źle myślisz. W tym wypadku scanf może zwrócić -1 - EOF, 0, 1, 2 lub 3. scanf zwraca ilość argumentów, które udało mu się dopasować. Jak np. zamiast cyfr będą litery to się wywali i zwróci np. 0

0

Tzn. kiedy jako pierwszą wartość podam cyfrę, a drugą wartość literę to mi zwróci 1? i żeby warunek scanf()==3 został spełniony muszę podać 3 wartości typu float, w przeciwnym wypadku pętla przerwie swoje działanie, teraz dobrze myśle?

0

Dzięki za pomoc! Jeszcze jedno pytanko w jakim przypadku wystąpi -1 - EOF?

0

Jak już nie będzie co czytać, na wejściu pojawi się EOF(standardowe wejście to nie koniecznie musi być klawiatura, zresztą EOF to bodajże ctrl+z)

0

Dzięki serdeczne WSZYSTKIM za pomoc!! Teraz rozumiem tą 'magię';)

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