Witam, mam następujący problem.
Muszę napisać program, który wczyta od użytkownika dokładnie 5 znaków na raz, następnie, jeśli znajdzie błąd, to wypisze, na czym dokładnie on polega i da użytkownikowi możliwość poprawienia danych (zakładam, że również w postaci wprowadzenia 5 znaków na raz).
Problem polega na tym, że program co prawda wyłapuje wszystkie sytuacje błędne (na razie pominąłem warunki określające zakres liczb reprezentujących godziny i minuty, gdyż najpierw chcę naprawić powstałe już błędy), ale nie potrafi wyczyścić bufora klawiatury i gdy użytkownik poda godzinę ponownie, konsola cały czas czeka na dane.
Moja wiedza w zakresie języka C jest minimalna i na chwilę obecną nie jestem w stanie naprawić tego błędu samodzielnie, choć może się okazać, że łatwiej będzie napisać kod ponownie, niż naprawiać ten w obecnej formie.
<code class="c">#include <stdio.h>
#include <ctype.h>
main()
{
char godzina[6];
for (int x = 0; x < 6; x++) {
godzina[x] = getchar();
}
while (godzina[5] != '\n') {
printf("\nWprowadziles za duzo znakow. Podaj godzine (hh:mm): ");
while (getchar() != '\n')
;
for (int x = 0; x < 6; x++) {
godzina[x] = getchar();
}
}
while (isdigit(godzina[0]) == 0 || isdigit(godzina[1]) == 0|| isdigit(godzina[3]) == 0 || isdigit(godzina[4]) == 0) {
printf("\nBledne dane. Do podania godzin i minut uzyj tylko cyfr: ");
while (getchar() != '\n')
;
for (int x = 0; x < 6; x++) {
godzina[x] = getchar();
}
}
while (godzina[2] != ':') {
printf("Bledne dane. Jako separatora uzyj dwukropka: ");
while (getchar() != '\n')
;
for (int x = 0; x < 6; x++) {
godzina[x] = getchar();
}
}
printf("\n\nKoniec programu.\n\n");
return 0;
}
Próbowałem przeanalizować również alternatywny sposób, który został mi podsunięty, jednak z uwagi na moją niewielką wiedzę nie potrafię odpowiedzieć sobie na pytanie, czemu w tym przypadku program przepuszcza np. 23:111. Gdyby ktoś wytłumaczył mi, czy jest sens zrobić to za pomocą funkcji fgets(), to byłbym bardzo wdzięczny.
#include <stdio.h>
#include <ctype.h>
main()
{
int isIncorrect = 1;
do {
char fullTime[6];
fgets(fullTime, 6, stdin);
printf("\n%c\n", fullTime[5]);
// check time format
if (fullTime[5] != '\0') {
printf("Too many characters!");
}
else if (fullTime[2] != ':') {
printf("Wrong format!");
}
else if (!(isdigit(fullTime[0]) && isdigit(fullTime[1]) && isdigit(fullTime[3]) && isdigit(fullTime[4]))) {
printf("Not a number!");
}
else {
printf("%s", fullTime);
isIncorrect = 0;
}
puts("");
} while (isIncorrect);
return 0;
}
Z góry dziękuję za, mam nadzieję, szybką pomoc, gdyż straciłem już na to zadanie 4 dni i obawiam się, że mogę nie zdążyć zrobić tego zadania w pełni poprawnie.