Funkcja scanf niedziałający znak nowej linii w buforze

0

Program nie działa prawidłowo od razu przeskakuje do nowych wierszy i wpisuje złe dane.

#include <stdio.h>
int main() {
  char topping[24];
  int slices;
  int month, day, year;
  float cost;

  printf("Ile kosztuje pizza w Twojej okolicy? ");
  printf("Wpisz wartość w formacie $XX.XX.\n");
  scanf(" $%f", &cost);

  printf("Jaki jest Twój ulubiony rodzaj pizzy? Wpisz tylko jedno słowo.\n");
  scanf(" %s", topping); // \n
  
  printf("Ile kawałków pizzy %s ", topping);
  printf("dasz rady zjeść na raz?\n");
  scanf(" %d", &slices);

  printf("Podaj dzisiejszą datę w formacie XX.XX.XX.\n");
  scanf(" %d.%d.%d", &day, &month, &year);
  printf("\n\nMoże zjesz obiad dnia %d.%d.%d", month, day, year);
  printf("\ni pochłoniesz %d kawałków pizzy %s!\n", slices, topping);
  printf("Będzie Cię to kosztować $%.2f!\n\n\n", cost);
}
2

A gdzie przykład danych wejściowych, oczekiwany wynik i wynik faktyczny?
https://godbolt.org/z/s1cGeE3ar - zgadując dane wejściowe wygląda na to, że działa

0

@MarekR22: Proszę bardzo. Jak widać przeskakuje od razu po wpisaniu ceny pizzy i pomija wpisanie rodzaju pizzy.

Ile kosztuje pizza w Twojej okolicy? Wpisz wartość w formacie $XX.XX.
25.25
Jaki jest Twój ulubiony rodzaj pizzy? Wpisz tylko jedno słowo.
Ile kawałków pizzy 25.25 dasz rady zjeść na raz?
2
Podaj dzisiejszą datę w formacie XX.XX.XX.
28.11.23


Może zjesz obiad dnia 11.28.23
i pochłoniesz 2 kawałków pizzy 25.25!
Będzie Cię to kosztować $0.00!
1

Nie wpisałeś $ a twój program oczekuje że ma pojawić się $.
Skoro scanf nie moż znaleźć $ to wpada w stan błędu.

0

Dzięki @MarekR22 warto to tu umieścić na forum.

#include <stdio.h>

int main() {
  char topping[24];
  int slices;
  int month, day, year;
  float cost;

  printf("Ile kosztuje pizza w Twojej okolicy? ");
  printf("Wpisz wartość w formacie $XX.XX.\n");
  if (scanf(" $%f", &cost) != 1) {
    fprintf(stderr, "Nie odczytano ceny!\n");
    return 1;
  }

  printf("Jaki jest Twój ulubiony rodzaj pizzy? Wpisz tylko jedno słowo.\n");
  if (scanf(" %s", topping) != 1) {
    fprintf(stderr, "Nie odczytano rodzaju!\n");
    return 2;
  }

  printf("Ile kawałków pizzy %s ", topping);
  printf("dasz rady zjeść na raz?\n");
  if (scanf(" %d", &slices) != 1) {
    fprintf(stderr, "Nie odczytano liczby kawałków!\n");
    return 3;
  }

  printf("Podaj dzisiejszą datę w formacie XX.XX.XX.\n");
  if (scanf(" %d.%d.%d", &day, &month, &year) != 3) {
    fprintf(stderr, "Nie odczytano pełnej day!\n");
    return 4;
  }
  printf("\n\nMoże zjesz obiad dnia %d.%d.%d", month, day, year);
  printf("\ni pochłoniesz %d kawałki pizzy %s!\n", slices, topping);
  printf("Będzie Cię to kosztować $%.2f!\n\n\n", cost);
}

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