Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Shaker

Rozwiązany: Gdy liczba zmienia się w ciąg znaków, C

Polecane posty

Z racji, iż jako świeżo upieczony student informatyki muszę potrafić programować w języku C to zabrałem się za praktykę. Tak sobie napisałem o to taki kawałek kodu(wyciąłem kawałek, #include jest podane u mnie):


int _tmain()
{
setlocale(LC_ALL, "polish");

unsigned int liczba;
puts("Podaj liczbę całkowitą w przedziale 1-7");
scanf_s("%d", &liczba);


if (liczba>7)
printf("Liczba nie jest całkowita lub nie mieści się w przedziale");
else
switch(liczba){
case 2: printf("Podałeś 2");
break;
case 4: printf("Podałeś 4");
break;
case 6: printf("Podałeś 6");
break;
case 7: printf("Podałeś 7");
break;
default:
printf("Nie wpisałeś ani 2 ani 4 ani 6 ani nawet 7");
}
;

return 0;
}

Wszystko jest dobrze i program się kompiluje, jednak w przypadku wpisania zamiast liczby większej od 7, jakiegoś znaku to wyskakuje ta sama odpowiedź, czyli ,,Liczba nie mieści się w przedziale". Teraz zradza się pytanie, jak określić, że gdy ,,liczba" staje się znakiem/łańcuchem ma wyświetlić komunikat: ,,Podany znak jest nieprawidłowy"?

Próbowałem określić przy if, że gdy zmienna staje się znakiem/łańcuchem to ma to napisać, jednak wtedy wyskakuje mi błąd, że nie można zmieniać int na char. Wiem o tym, jednak jak inaczej mógłbym to zrobić. Proszę o pomoc przy tym zagadnieniu.

Link do komentarza
Udostępnij na innych stronach

scanf_s zwraca liczbę poprawnie skonwertowanych i przypisanych wartości. W przypadku błędu zwróci 0 lub EOF - sprawdź. Poczytaj opis funkcji http://msdn.microsoft.com/en-us/library/w40768et(v=vs.80).aspx.

Jeśli chodzi o Twojego switcha, to jest on nadmiarowy ponieważ printf to wyjście formatowane, więc możesz zrobić

printf("Podałeś %d.", liczba);

i w ogóle zrezygnować ze switcha.

Link do komentarza
Udostępnij na innych stronach

Z tym scanf_ s zrobiłem, bo program mi wywalał błąd( teraz już nie ma z tym problemu, co dziwne).

Switcha używam dla próby(chodziło o wyłączenie pewnych liczb i wtedy wyświetlenie). Czy to mi pomoże z tym wpisaniem znaku/łańcucha?

PS. Rozumiem już dlaczego nadmiarowy. Ten printf łatwiejszy, jednak nadal nie wiem co zrobić z przyrównaniem liczby do znaku, bo po prostu wczytuję %d, a znakowa to %s. Tylko, jak zrobić by działało dla obu.

Link do komentarza
Udostępnij na innych stronach

Niestety w C z tego co wiem nie ma wbudowanego mechanizmu sprawdzania inputu.

Możesz np. zrobić tablicę siedmiu intów, gdzie array=i, a przy wczytywaniu zmiennej sprawdzać, czy zmienna ta jest równa co do wartości jednej z komórek tablicy.

A żeby działało dla obu, to musisz wczytywać wszystko jako char, a następnie rzutować co chcesz na int/double

Link do komentarza
Udostępnij na innych stronach

@Hakken

wies.niak już mi pomógł. Mamy takie oto rozwiązanie problemu. Do zamknięcia.


unsigned int liczba;
puts("Podaj liczbę w przedziale 1-7");
int result = scanf_s("%d", &liczba);

if(result == EOF || result = 0)
{
printf("Podaj liczbę!");
}
else
{
if (liczba>7)
printf("Liczba nie mieści się w przedziale");
else
switch(liczba){
case 2: printf("Podałeś 2");
break;
case 4: printf("Podałeś 4");
break;
case 6: printf("Podałeś 6");
break;
case 7: printf("Podałeś 7");
break;
default:
printf("Nie wpisałeś ani 2 ani 4 ani 6 ani nawet 7");
break;

}
}
return 0;

Link do komentarza
Udostępnij na innych stronach

Gość
Temat jest zablokowany i nie można w nim pisać.


  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...