[C] Odróżnianie liczby od innych znaków

0

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.

0

Sprawdź numer ASCII.

0

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
}

0

a mogę w taki while wpisać 2 razy scanf??

0

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)){}

0

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;
}
0

Można zrobić sprawdzanie, czy x = 0 lub y = 0. (Założenia)

0

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;
}
0

użyłeś tutaj break żeby wyjść z pętli, a da się to samo zrobić w switch case??

0

nie zrozumiałem pytania

0
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

0

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;
}
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;

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

0

return 0

albo

bool koniec = false;
while (!koniec)
{
..
jesli ma sie przerwzc petla to ustawiasz flage koniec na true
..
}

0

nie znam jeszcze operacji boola, ale dzięki

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