Kalkulator w Ansi C pobranie zmiennej

0

Witajcie .

Od razu napiszę że jestem początkującym programistą wiec śmiało możecie po mnie jeździć i wytykać mi błędy.

Kurcze mam kod niby wszystko ok tylko nie mogę dojść dlaczego pobiera mi zmienną c zawsze po 2 razy za miast raz ....

W sensie że gdy pyta o wprowadzenie zmiennej to pierwszą liczbę zawsze pobiera dwa razy . czemu tak się dzieje ?

Co jest nie tak siędzę i siedzę i nie widzę, nie wiem .

int main(int argc, char *argv[]) 
{
	int i;
	for(i=0;i<10;i++)
	{
		int a;
		printf("Kalkulator : wpisz Liczbe dla pozadanego dzialania \n Mnozenie-1 \n Dzielenie-2 \n Dodawanie-3 \n Odejmowanie-4 \n aby wyjsc wyberz 5 \n");
		scanf("%d" ,&a);
		switch(a)
		{
			case 1 :
				{
					float c,b,d;
					printf("Mnozenie w postaci a*b \n \n Podaj liczbe a \n");
					scanf("%f \n" ,&c);
					printf("Podaj liczbe b \n");
					scanf("%f\n" ,&b);
					d=c*b;
					printf("Wynik = %.2f \n" ,d);
				}
			break;
			case 2 : 
				{
					float b,c,d;
					printf("Dzielenie w postaci a/b \n \n Podaj liczbe a \n");
					scanf("%f \n" ,&c);
					printf("Podaj liczbe b \n");
					scanf("%f\n" ,&b);
					d=c/b;
					printf("Wynik = %.2f \n" ,d);
				}
			break;
			case 3 : 
				{
					float b,c,d;
					printf("Dodawanie w postaci a+b \n \n Podaj pierwsza liczbe \n");
					scanf("%f \n" ,&c);
					printf("Podaj druga liczbe \n");
					scanf("%f\n" ,&b);
					d=c+b;
					printf("Wynik = %.2f \n" ,d);
				}
			break;
			case 4 :
				{
					float b,c,d;
					printf("Odejmowanie w postaci a-b \n \n Podaj liczbe a \n");
					scanf("%f \n" ,&c);
					printf("Podaj liczbe liczbe \n");
					scanf("%f\n" ,&b);
					d=c-b;
					printf("Wynik = %.2f \n" ,d);
				}
			break;
			case 5 : return 0;
			default : printf("Niestety pomyliles sie. wybierz dzialanie wpisujac poparawna liczbe dzialania\n ");
		}
	i=i-1;
	fflush(stdin);
	}
	system("pause");
	return 0;
} 
1

Spróbuj zmienić wczytywanie skoro źle wczytuje.
Spróbuj np. tak:

printf("Mnozenie w postaci a*b \n \n Podaj liczbe a \n");
scanf("%f" ,&c);
printf("Podaj liczbe b \n");
scanf("%f" ,&b);
0

Jak wyżej, oraz

i=i-1;

piękny sposób zapewnienia sobie pętli nieskończonej

0

Taki szczegół a podziałało .... Myślałem że to nie ma znaczenia najmniejszego .

btw. dzięki ...

0

A jak inaczej ? Jestem nowy jak już pisałem. Popraw mnie a na pewno zapamiętam . :)

Czemu taki szczegół ma takie znaczenie i tak wpływa na działanie programu ? tak z ciekawości ?

0

Przynajmniej mi się lepiej czyta :)

printf("Kalkulator : wpisz Liczbe dla pozadanego dzialania \n 1.Mnozenie \n 2.Dzielenie \n 3.Dodawanie \n 4.Odejmowanie \n 5.Wyjscie \n");
1

Skoro już zapraszasz jeżdżenie, 2 szczegóły.
Po pierwsze ucz się C99 albo nawet C11. Naprawdę warto, mają parę bardzo użytecznych cech. Jeśli przyjdzie ci kiedyś kodować jednym z nich znając różnicę w stosunku do ANSI pewnie się ucieszysz inni utrzymujący kod pewnie też. :)
Po drugie radzę wyrabiać nawyk krótkich funkcji (najlepiej do 10-20 linijek. 40 już błaga o refactor) i wąskich wierszy (generalnie poleca się 80 znaków, ja preferuję nawet 60). Take ograniczenia dobrze wpływają na czytelność. Musisz lepiej się zastanowić nad kodem, który piszesz, co w C jest szczególnie ważne, choć w sumie w każdym języku.
Życzę powodzenia w programowaniu. ;)

1
    for(i=0;i<10;i++)
    {
    ...
    i=i-1;
    ...
    }

WTF? Czemu nie dać po ludzku:

for(;;)

?

0

Na studiach mam ANSI C w nim wszystko robimy... Gdybym mógł wybrał bym pewnie coś innego .

To o czytelności zapamiętam,zanotuje.

refractor ? Jeszcze nie miałem poczytam o tym

A co do długości tych wierszy to zamiast takiego zapisu :

printf("Ala ma kota lubi placki i biega po skałach , krzycząc piszcząc i wymachując nogami."); 

Coś takiego : ?

printf("Ala ma kota lubi placki i biega po skałach");
printf("krzycząc piszcząc i wymachując nogami."); 

Dobrze zrozumiałem ?

0
_13th_Dragon napisał(a):
    for(i=0;i<10;i++)
    {
    ...
    i=i-1;
    ...
    }

WTF? Czemu nie dać po ludzku:

for(;;)

?

Zapamiętam ... :)

0
  1. Jeśli używacie w miarę współczesnego kompilatora pisanie kodu c99 w większości przypadków skończy się ostrzeżeniem tak więc jest szansa. Jest też szansa, że prowadzący jest rozsądnym człowiekiem i zgodzi się na kod w nowszym standardzie.
  2. refactoring to generalnie każda ingerencja w kod, która ma na celu poprawić czytelność/architekturę kodu utrzymując przy tym jego logikę. Przede wszystkim chodzi o zmiany nazw, dzielenie/łączenie funkcji, klas, modułów itp.

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