Zamiana char na int i wykorzystanie do obliczeń

Wasio
2013-11-17 13:53
Wasio
0

Witam. Mam pewien problem. Otóż na zajęciach mieliśmy polecenie, aby wykonać program, który:

  1. Zada pytanie i pobierze od użytkownika dowolna odpowiedz
  2. Poprosi o podanie dowolnej liczby
  3. Z pytania 1 i 2 pobierze liczby i wyliczy pole trójkąta
  4. Wyrysuje tyle gwiazdek ile wyniesie pole

Problem dotyczy tego, że nie wiem jak z 1 pytania pobrać liczbę, skoro zadamy np. "Ile masz palców u prawej ręki?"
Odpowiedź: "Pięć" <--- ale są tu 4 znaki i to właśnie liczba 4 ma zostać pobrana do dalszych obliczeń. Oto co udało mi się stworzyć, ale nie działa poprawnie:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char a;
    printf("Ile masz palcow u prawej reki?\n");
    scanf("%c", &a);
    char *str = "123";
    int b = atoi(str);
    printf("%d", b);

    float c;
    printf("Podaj dowolna liczbe dodatnia:\n");
    scanf("%f", &c);

    double d;
    d = (b*c / 2);
    printf("Pole powierzchni trojkata wynosi: %f\n", d);

    int e = 1;
    while (e <= d)
    {
        printf("*", e);
        ++e;
    }
}
edytowany 2x, ostatnio: aurel, 2016-12-13 18:26

Pozostało 580 znaków

2013-11-17 14:06

Rejestracja: 14 lat temu

Ostatnio: 2 dni temu

0

b=a-'0';


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-11-17 14:12

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

0

jak wpisałem

...
char *str = "123";
 int b = (a-'0');
printf("%d",b);
...

to wywala mi wartość "-48"
a chciałbym, że jak wpisuje "cztery" to żeby dawało 6 :)

Pozostało 580 znaków

2013-11-17 18:10

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

0

Teraz powinno być dobrze

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int a;
    printf("Ile masz palcow u prawej reki?\n");
    scanf("%d", &a);
    //char *str = "123";
    //int b = atoi(str);
    printf("%d", a);

    float c;
    printf("Podaj dowolna liczbe dodatnia:\n");
    scanf("%f", &c);

    double d;
    d = (a*c) / 2;
    printf("Pole powierzchni trojkata wynosi: %f\n", d);

    int e = 1;
    int tym = (int)d;

    while (e <= tym)
    {
        printf("*", e);
        ++e;
    }
}

<?
$a = 4; //jakaś liczba całkowita
$b = 5; // jakaś liczba całkowita
$c = $a + $b;
print $c;
?>
Mój pierwszy program(skrypt)
edytowany 2x, ostatnio: aurel, 2013-11-19 12:58
Zada pytanie i pobierze od użytkownika dowolna odpowiedz - którego słowa nie rozumiesz? - _13th_Dragon 2013-11-17 20:17

Pozostało 580 znaków

2013-11-17 22:52

Rejestracja: 12 lat temu

Ostatnio: 3 lata temu

0

Ten kawałek kodu powinien Ci pomóc:

#include <cstdio>

int main(int argc, char* argv[]) {

    printf("Dowolne pytanie\n");
    int dlugoscOdpowiedzi = 0;

    // Pobiera pierwszy znak
    int literaOdpowiedzi = getchar();

    while (literaOdpowiedzi != '\n') {
        literaOdpowiedzi = getchar();
        ++dlugoscOdpowiedzi;
    }

    printf("Dlugosc odpowiedzi wynosi %d\n", dlugoscOdpowiedzi);

    return 0;
}

Co prawda nie przechowuje odpowiedzi na pytanie ale też nie pisałeś że jest to konieczne. Jeśli chcesz rozszerzyć go o tą funkcjonalność będziesz musiał zająć się dynamiczną alokacją tablicy (przy założeniu że długość odpowiedzi może być dowolna).

edytowany 1x, ostatnio: Tattva, 2013-11-17 22:52
" ... Z pytania 1 i 2 pobierze liczby ... " - _13th_Dragon 2013-11-17 23:17
"Odpowiedź: "Pięć" <--- ale są tu 4 znaki i to właśnie liczba 4 ma zostać pobrana do dalszych obliczeń." Czyli długość odpowiedzi na pierwsze pytanie jest jego pierwszą liczbą do obliczeń. Przynajmniej ja to tak rozumiem. - Tattva 2013-11-17 23:23
Heh, ja tak daleko nie doczytałem :D w takim razie wystarczy: int b=0; while(getchar()!='\n') ++b; - _13th_Dragon 2013-11-17 23:46
Też prawda :). Najfajniej byłoby sprawdzić jedną instrukcją ile znaków jest w buforze i odjąć 1 na znak końca lini. Można byłoby się pozbyć tej pętli. Tylko niestety nie widziałem sensownego rozwiązania które działałoby na wszystkich systemach. - Tattva 2013-11-18 20:58

Pozostało 580 znaków

2013-11-19 11:57

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

0

Ok działa, dzięki za pomoc.

Pozostało 580 znaków

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