Mam takie zadanie w którym mam pobrać dwie liczby typu float lub double i wykonać na nich pewne obliczenia.
program ma się powtarzać aż nie wpisze znaku niebędącego liczbą.
Właśnie nie wiem jak odróżnić czy jest to liczb czy inny znak.
Sprawdź numer ASCII.
scanf przy wczytywaniu elementów zwraca ile elementów udało się wczytać. jeśli ta liczba będzie różna od liczby elementów którą chciałeś wczytać to znaczy, że ktoś wpisał inne znaki.
przykładowo:
int d;
while (scanf("%d",&d)==1)
{
// jesli ktos nie wpisze liczby to automatycznie wyłazi z whila
}
a mogę w taki while wpisać 2 razy scanf??
możesz zrobić:
while (scanf("%d%f",&d,&f)==2)
{
}
albo
while(scanf("%d",&d)==1 && scanf(...)==1...)
albo nawet:
while (scanf("%d%d",&a,&b) && printf("%d\n",a+b)){}
Napisałem takie coś, Dało by sie to jakoś lepiej zrobić??
#include <stdio.h>
```c
int main(void)
{
float x, y, z;
int a=0, stan1, stan2;
printf("Podaj pierwsza liczbe: ");
stan1=scanf("%f", &x);
printf("Podaj druga liczbe: ");
stan2=scanf("%f", &y);
while(stan1==1 && stan2==1)
{
z=(x-y)/(x*y);
printf("%f\n", z);
printf("Podaj pierwsza liczbe: ");
stan1=scanf("%f", &x);
printf("Podaj druga liczbe: ");
stan2=scanf("%f", &y);
}
system("pause");
return 0;
}
Można zrobić sprawdzanie, czy x = 0 lub y = 0. (Założenia)
coś takiego:
#include <stdio.h>
int main(void)
{
float x, y, z;
int a=0, stan1, stan2;
while(1)
{
printf("Podaj pierwsza liczbe: ");
stan1=scanf("%f", &x);
printf("Podaj druga liczbe: ");
stan2=scanf("%f", &y);
if (stan1!=1 || stan2!=1)
break;
z=(x-y)/(x*y);
printf("%f\n", z);
}
system("pause");
return 0;
}
użyłeś tutaj break żeby wyjść z pętli, a da się to samo zrobić w switch case??
nie zrozumiałem pytania
if (stan1!=1 || stan2!=1)
break;
break tutaj każe wyjść z pętli.
a czy jak używam
switch()
case:
.................
to czy też moge tak wyjść z pętli??
bo break w case wychodzi ze switch
a dokładnie mam taki problem że jak wybieram 5 to wychodzi od razu z pętli
program może i da się napisac lepiej ale nic lepszego mi nie przychodzi do głowy
#include <stdio.h>
#define WNADGODZ 60
#define GODZROBOCZE 40
int main(void)
{
int i,x;
int brutto, netto, WGODZ;
int lgodz, roboczegodz, zaplata1, zaplata2;
int nadgodz=0, y=1;
while(1)
{
printf("Stawka za godzine:\n"
"1.35zl/godz\n"
"2.37zl/godz\n"
"3.40zl/godz\n"
"4.45zl/godz\n"
"5.EXIT\n");
printf("prosze wybrac: ");
scanf("%d", &x);
switch(x)
{
case 1:
WGODZ=35;
break;
case 2:
WGODZ=37;
break;
case 3:
WGODZ=40;
break;
case 4:
WGODZ=45;
break;
case 5:
default:
continue;
}
printf("Podaj liczbe przepracowanych godzin: ");
scanf("%d", &lgodz);
if(lgodz>GODZROBOCZE)
{
nadgodz=lgodz-GODZROBOCZE;
roboczegodz=lgodz-nadgodz;
zaplata1=roboczegodz*WGODZ;
zaplata2=nadgodz*WNADGODZ;
brutto=zaplata1+zaplata2;
}
else
{
brutto=lgodz*WGODZ;
}
if(brutto<=1200)
{
netto=brutto*15/100;
netto=brutto-netto;
}
if(brutto>1200 && brutto<=1800)
{
netto=brutto*20/100;
netto=brutto-netto;
}
if(brutto>1800)
{
netto=brutto*25/100;
netto=brutto-netto;
}
printf("Zarobek netto %d, zarobek brutto %d", netto, brutto);
system("pause");
system("CLS");
}
printf("\n");
return 0;
}
nie, w tym wypadku break wychodzi ze switcha.
Dla przykładu, zobacz sobie co wypisze ten program jak nie użyje breaka:
#include <stdio.h>
int main()
{
int i;
for (i=0; i<6; i++)
{
switch(i)
{
case 0: printf("a");
case 1: printf("b");
case 2: printf("c");
case 3: printf("d");
case 4: printf("e");
default: printf("f");
}
printf("\n");
}
return 0;
}
sprawdź sobie co się stanie jak break dasz tylko w jednym casie
jak ktoś naciska 5, najprościej dodaj po prostu return 0;
przechodzi przez case po kolei, tylko szukam sposobu na wyjście jak wybiorę 5
Jeden pomysł mam taki żeby przenieść obliczenia do każdego case zrobić while(y=1), a w case 5 y=0;
albo zostawić jak jest i użyć goto ale z tego podobne się nie korzysta
return 0
albo
bool koniec = false;
while (!koniec)
{
..
jesli ma sie przerwzc petla to ustawiasz flage koniec na true
..
}
nie znam jeszcze operacji boola, ale dzięki