Kalkulator, sprawdzenie

0

Proszę, wskażcie błąd. Szukam go od pół godziny i nic.

#include <stdio.h>
int main(void)
{
    long a, b;
    char oper;

    printf(".:Witamy w kalkulatorze!:.\n");
    printf("Podaj pierwsza liczbe\n");
    scanf("%d", &a);
   // printf("%d\n", a);

    printf("Podaj operacje ktora chcesz wykonac\n");
    printf("Wcisnij +, -, * lub /\n");
    scanf("%c", &oper);
   // printf("%c\n", oper);

    printf("Podaj druga liczbe\n");
    scanf("%d", &b);
    printf("Pobieranie zakonczone.\n");

    switch(oper)
    {
        case '+': printf("%ld + %ld = %ld", a, b, a+b);
                    break;
        case '-': printf("%ld - %ld = %ld", a, b, a-b);
                    break;
        case '*': printf("%ld * %ld = %ld", a, b, a*b);
                    break;
        case '/': printf("%ld / %ld = %ld", a, b, a/b);
                    break;
        default: printf("Nie wiem co z tym zrobic.");


    }

return 0;

}
0

Na czym polega problem?

1

Szklana kula mówi:

  • scanf z %d wczyta liczbę ale zostawi w buforze znak nowej linii który od razu wczyta nam scanf z %c i w efekcie nie zapyta nas o działanie i wypisze ze nie wie co zrobić
  • czemu raz używasz %d a potem %ld?
0

Dziękuję Shalom, zapomniałam o tym znaku nowej linii, który się automatycznie zapisuje.
ld i d to przez to że zamieniałam kilka razy zmienne i zrobił się bałagan ;)

I mam jeszcze jedno pytanie...
Mam program, który ma zamieniać małe znaki na duże a duże na małe, oraz zastępuje wielokrotne spacje jedną.
Cały program mam napisany, tylko nie wiem jak poradzić sobie z tymi wielokrotnymi spacjami.

0

Iterujesz po tekście przepisując go do nowego miejsca i jeśli trafisz na spację to przepisujesz ją i skaczesz do pętli która przesuwa się po tekście (bez przepisywania) aż nie trafi na coś innego niż spacja.

0
#include <stdio.h>
#include <ctype.h>
#define SPACJA ' '


int main(void)
{
    char ch;

    printf("Podaj dowolna ilosc liter, wcisnij 'enter' aby zakonczyc.\n");

    while ((ch = getchar()) != '\n')
    {
        if (islower(ch))
        {
            ch = toupper(ch);
            putchar(ch);
        }
        else if (isupper(ch))
        {
            ch = tolower(ch);
            putchar(ch);
        }
        else if (ch == SPACJA)
        {
            continue;
        }


    }
    putchar(ch);
    return 0;

}

Tylko, że teraz 'zjada' wszystkie spacje ;|

0

Napisałem ci że pierwszą przepisujesz a reszty nie! Musisz tam mieć taką "wewnętrzną pętlę", w jednej nie da rady.

0

Można jedną pętlą, wystarczy zapamiętać w zmiennej, czy w poprzednim znakiem była spacja:

bool byla_spacja;

byla_spacja = false;
while ((ch = getchar()) != '\n')
{
	if (islower(ch))
	{
		ch = toupper(ch);
	}
	else if (isupper(ch))
	{
		ch = tolower(ch);
	}
	else if (ch == ' ')
	{
		if (byla_spacja) continue; // kolejna spacja, pomijamy ją
	}
	byla_spacja = (ch == ' ');

	putchar(ch);
}

#define SPACJA ' '
Na litość boską, to że spacja jest spacją każdy widzi, nie trzeba nadawać jej nowej nazwy.

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