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.
[C] Odróżnianie liczby od innych znaków
- Rejestracja: dni
- Ostatnio: dni
- Postów: 79
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2520
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
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2520
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)){}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 79
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;
}
- Rejestracja: dni
- Ostatnio: dni
Można zrobić sprawdzanie, czy x = 0 lub y = 0. (Założenia)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2520
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;
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 79
użyłeś tutaj break żeby wyjść z pętli, a da się to samo zrobić w switch case??
- Rejestracja: dni
- Ostatnio: dni
- Postów: 79
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 79
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;
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2520
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;
- Rejestracja: dni
- Ostatnio: dni
- Postów: 79
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2520
return 0
albo
bool koniec = false;
while (!koniec)
{
..
jesli ma sie przerwzc petla to ustawiasz flage koniec na true
..
}