1 / 50
Jan 2016

include

using namespace std;

int main()
{
for(int i=1;i<100;i++)
{
int32_t a,b,x=0;
string wybor;
cin>>wybor;
cin>>a>>b;

if (wybor=="+")
{
    x=a+b;
}
if (wybor=="-")
{
    x=a-b;
}
if (wybor=="*")
{
    x=a*b;
}
if (wybor=="/")
{
    x=a/b;
}
if (wybor=="%")
{
    x=a%b;
}

cout<<x<<endl;

}

return 0;

}

Co jest nie tak w tym kodzie?

  • created

    Jan '16
  • last reply

    4d
  • 49

    replies

  • 4.3k

    views

  • 22

    users

  • 3

    likes

  • 12

    links

Frequent Posters

There are 49 replies with an estimated read time of 4 minutes.

Po pierwsze - fatalne formatowanie kodu. Ledwo co tutaj widać. Dodatkowo jak sądzę źle wklejony - include wygląda podejrzanie...

Po drugie - pierwsze zdanie specyfikacji wejścia. Ilość danych na wejściu nie jest znana a Ty zakładasz, że testów jest 99.

Pomyśl nad czymś w rodzaju while (cin>>wybor>>a>>b).

Na przyszłość: zmienna x jest niepotrzebna. Zamiast if, if, if, ..., if - lepiej używać if, else if, else if, ... else if, else. A w tym przypadku o wiele lepiej użyć switch. String można zastąpić zmienną char

Kod wkleja się w tagach dostępnych pod ctrl +k lub też linkuje do ideone bo inaczej bywa pocięty.

Niemniej jednak twój był czytelny na tyle, że zauważyłem iż ustaliłeś liczbę testów "na szytwno" na 100, co jest błędem, masz wczytywać "do końca pliku". Zamiast fora daj while (cin >> wybor), i usuń wczytywanie wyboru z wnętrza pętli. Potem usuń kod z forum bo ci to zaliczy.

ps jak byś testował wpisując działania "z palca", to koniec danych przy takim sposobie wczytywania "emulujesz" przez ctrl + d w Linuksie i chyba ctrl + z w Windows.

Zrobiłem tak jak mówiłeś i jest przekroczony limit czasu, zresztą jak w większości zadań które robię, w konsoli wszystko idzie dobrze a jak daje do sprawdzenia do przekroczenie limitu czasowego

Jesteś pewien że nie pominąłeś czegoś np usunięcia cin >> wybór z wnętrza pętli? bo ja twoim kodem po opisanej przeze mnie zmianie dostałem AC. Jak nic nie wypatrzysz, to usuń ten kod co już jest, i daj jeszcze raz aktualny.

ps na przyszłość dopisuj się do istniejących wątków.

Dobra udało się zrobiłem switchem i ogólnie wszystko zmieniłem i już działa dzięki za pomoc smiley tak btw jak się usuwa wątki bo nie mogę znaleźć ;(

Nie ma usuwania. Edytuj kod, zastępując go napisem "AC"

19 days later

Sędzie pokazuje błąd, ale ja jako początkujący go nie widzę. Może ktoś dać jakąś wskazówkę? smiley

W zadaniu masz, że zostanie podana nieokreślona liczba zestawów danych.
Użyj while(cin>>a>>b>>c)

W odpowiedzi na zestaw z zadania twój program daje 16-43021, przydało by się wyświelać odpowiedzi w osobnych liniach jak to w przykładzie jest. Jak już ci zaliczy nie zapomnij usunąć kodów, a zaliczy jak dodasz ten podział.

ps żeby uniknąć takich błędów w przyszłości, zmień sposób testowania np korzystaj z ideone.com. Tam możesz od razu wkleić całe wejście, więc taki błąd będzie od razu widoczny w wyjściu.

U mnie widzę poprawne wyniki, nie wiem dlaczego nie może tego uznać, trudno, omijam to zadanie, dzięki za próbę pomocy smiley

Zamiast while (i<100) daj while (cin >> a >> b >> c) i będzie dobrze. Swoją drogą jest tu więcej zadań w których będziesz wczytywał w taki sposób, więc nie rezygnuj łatwo. I usuń kod z forum jak już ci zaliczy.

Zrobiłem jak radzisz na samym początki i nie zaliczyło, teraz również nie zaliczyło, więc no sam nie wiem.

Wcześniejszy kod był nie do końca dobry, dla danych wejściowych, tj
Wejście:
+ 7 9
- 0 4
* 5 6
/ 8 3
% 5 2

Wyjście wyglądało tak:16-43021

Zamiast:
16
-4
30
2
1

Jak widać w tym fragmencie wczytujesz 2x, usuń 2 cin-a i ci zaliczy. Swoją drogą ta else return 0; linia jest zbędna, przy tej konstrukcji while "będzie wiedział" kiedy przestać. W przypadku gdybyś testował wczytując z palca (nie polecam) to kończysz przez ctrl + d pod Linuksem lub też ctrl + z pod Windows.

booooże frowning dziękuje bardzo bo naprawdę sprawdzałem ten kod z kilkanaście razy i nie zauważyłem tego, dopiero raczkuję