• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Niecodzienne zachowanie funkcji printf

Object Storage Arubacloud
+1 głos
228 wizyt
pytanie zadane 26 czerwca 2018 w C i C++ przez jakwisn Nowicjusz (160 p.)

Cześć, niedawno zacząłem przygodę z programowaniem i bawiłem się trochę programem, który znalazłem w internecie. Chciałbym byście pomogli mi zrozumieć naturę tego błędu\ zachowania programu (którego fragment dałem tu)

#include <stdio.h>
#include <math.h>

main()
{
  float  a, b, c,
          delta;

  printf("Podaj wspolczynnik a \n");
  scanf("%f", &a);
  printf("Podaj wspolczynnik b \n");
  scanf("%f", &b);
  printf("Podaj wspolczynnik c \n");
  scanf("%f", &c);

Gdy kod programu wygląda tak to wszystko śmiga jak ta lala, lecz gdy wstawię spację po %f program 2 razy pyta się o współczynnik a... 

Pytanie z czystej ciekawości, być może pomijam oczywistą własność funkcji, nie wiem i będę wdzięczny za wytłumaczenie :D 

komentarz 26 czerwca 2018 przez jakwisn Nowicjusz (160 p.)

tak lepiej

2 odpowiedzi

+4 głosów
odpowiedź 26 czerwca 2018 przez monika90 Pasjonat (22,940 p.)
wybrane 26 czerwca 2018 przez jakwisn
 
Najlepsza
Spacja w łańcuch formatującym każe funkcji wczytywać białe znaki tak długo jak się da, to znaczy aż napotka znak inny niż biały lub koniec wejścia. Więc u ciebie nie pyta się dwa razy o współczynnik a, tylko musisz wpisać współczynnik b, tylko po to żeby zakończyć pierwsze scanf, ten współczynnik zostaje w strumieniu i będzie odczytany przez drugie scanf.

Przy okazji, w deklaracji funkcji należy podać typ zwracany, bez tego masz błąd składniowy. Więc dopisz słowo int przed słowem main.
0 głosów
odpowiedź 26 czerwca 2018 przez Bondrusiek Maniak (61,370 p.)

Witam,

faktycznie dziwne zachowanie. Za stroną http://www.cplusplus.com/reference/cstdio/scanf/

Whitespace character: the function will read and ignore any whitespace characters encountered before the next non-whitespace character (whitespace characters include spaces, newline and tab characters -- see isspace). A single whitespace in the format string validates any quantity of whitespace characters extracted from the stream (including none).

Jak widać funkcja scanf() ignoruje białe znaki, które są w cudzysłowach ale z tego co mi się wydaje to musi za np. spacjami posiadać argumenty do przetworzenia. Taki już kod działa poprawnie

#include <stdio.h>
#include <math.h>

main()
{
  float  a, b, c,
          delta;
   int n;
  printf("Podaj wspolczynniki\n");
  scanf("%f %f %f", &a, &b, &c);

  printf("a = %f b = %f c = %f \n", a, b, c);

  return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 513 wizyt
pytanie zadane 10 sierpnia 2015 w C i C++ przez Patrycjerz Mędrzec (192,320 p.)
0 głosów
1 odpowiedź 529 wizyt
pytanie zadane 16 listopada 2022 w PHP przez zbiku25 Bywalec (2,940 p.)
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 16 sierpnia 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...