<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=61&amp;t=23993&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-10-23T23:07:10+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=61&amp;t=23993&amp;mode</id>
<entry>
<author><name><![CDATA[tomcat65]]></name></author>
<updated>2021-10-23T23:07:10+01:00</updated>
<published>2021-10-23T23:07:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234072#p234072</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234072#p234072"/>
<title type="html"><![CDATA[Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast ]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234072#p234072"><![CDATA[
Jest też inny sposób.<br />A. ograniczenie długości wpisywanej liczby można już w samym specyfikatorze np. %5d - pięć cyfr.<br />Inny sposób to zamiana tablicy na zmienną:<br /><br />int/uintx_t  wart1, wart2;<br /><br />i odczyt:<br /> scanf(&quot;%d&quot;, &amp;wart1);<br /> scanf(&quot;%d&quot;, &amp;wart2);<br /><br />B. funkcja scanf() zwraca wartość 1, jeśli wprowadzona dana jest zgodna ze specyfikatorem, a 0 jeśli niezgodna. <br />  zapis:<br />  if(scanf(&quot;%d&quot;, wart1)=!1)<br />     i tu np. stosowny komunikat.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15092">tomcat65</a> — 23 paź 2021, o 23:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2021-10-23T21:21:57+01:00</updated>
<published>2021-10-23T21:21:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234069#p234069</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234069#p234069"/>
<title type="html"><![CDATA[Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast ]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234069#p234069"><![CDATA[
<div class="quotetitle">fofex napisał(a):</div><div class="quotecontent"><br />Biblioteka standardowa (plik nagłówkowy ctype.h) dostarcza grupę funkcji testujących znak.<br /></div><br /><br />Oooo i też się czegoś nauczyłem. Dzięki, przyda się.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 23 paź 2021, o 21:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2021-10-23T19:58:06+01:00</updated>
<published>2021-10-23T19:58:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234062#p234062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234062#p234062"/>
<title type="html"><![CDATA[Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234062#p234062"><![CDATA[
<div class="quotetitle">danielos napisał(a):</div><div class="quotecontent"><br />Wg mnie najprościej sprawdzać czy zakres każdego znaku mieści się w określonych granicach, w tym przypadku cyfrach 0-9 (albo wg ASCI od 0x30 do 0x39).<br /></div><br /><br />Biblioteka standardowa (plik nagłówkowy ctype.h) dostarcza grupę funkcji testujących znak. <br /><br />[syntax=c]#include &lt;ctype.h&gt;<br /><br />int main()<br />{<br />      int c;<br /><br />      c = getc();<br /><br />      if(isdigit(c)) {<br />            //c jest cyfrą<br />      }<br />}[/syntax]<br /><br />Testowanie funkcją isdgit jest wygodne gdy mamy strumień znaków. W przypadku gdy wczytywanie znaków odbywa sie funkcją scanf nie jest to zbyt wygodne. Funkcja scanf jest buforowana a więc odczytanie znaków następuje po naciśnięciu entera. A więc można by wczytywać ciąg znaków jak leci jako string (ponieważ funkcja scanf nie &quot;wywali się&quot; po  napotkaniu znaku niezgodnego ze wzorcem), a nastepnie testować wczytane znaki na okoliczność wystąpienia innego znaku niż cyfra. W razie wystąpienia takiego znaku całośc jest odrzucana, w razie braku ciąg można przerobić na liczbę. I tu znów pomocą służ biblioteka standardowa.<br /><br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#define BUFLEN 100<br />int main()<br />{<br />    char buffer&#91;BUFLEN&#93;;<br />    int number;<br /><br />    while(scanf(&quot;%s&quot;,buffer)) {<br />       if(strspn(buffer, &quot;0123456789&quot;)==strlen(buffer)) {<br />            //wczytano wyłącznie cyfry<br />            number = atoi(buffer);<br />       } else {<br />           //wczytano co najmniej jeden znak nie będący cyfra<br />           //odrzuć<br />       }<br />    }<br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 40 minutach ]</span></strong><br /><br />No i mamy piękny okaz przepełnienia bufora  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> Trzeba się zabezpieczyć ograniczając liczbę znaków odczytanych z wejścia.<br />[syntax=c]scanf(&quot;%&quot; #BUFLEN &quot;s&quot;, buffer)[/syntax]<br />Oczywiście należy także przewidzieć w buforze miejsce na końcowy null.<br />[syntax=c]char buffer&#91;BUFLEN+1&#93;;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 23 paź 2021, o 19:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2021-10-23T18:53:18+01:00</updated>
<published>2021-10-23T18:53:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234060#p234060</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234060#p234060"/>
<title type="html"><![CDATA[Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast ]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234060#p234060"><![CDATA[
Pomyślmy razem: <br />- Gdzie zapisywane są wpisane znaki?<br />- Do zmiennej, która jest tabelą, a nazwa jej to tab.<br />- Więc jak sprawdzić pierwszy element, czy wpisana jest cyfra?<br />- No tak jak zostało podane używając tab[0].<br />- A jak sprawdzić dla, np 3 znaku?<br />- Wpisując tab[2].<br /><br />-Czyli co trzeba zrobić aby sprawdzić dla całego tekstu czy są same cyfry? <br />-Sprawdzić każdą komórkę zmiennej tab.<br /><br />Reasumując musisz sprawdzić jaka jest długość wpisanego tekstu i na podstawie tej wartości tyle razy skontrolować czy dany znak to cyfra.<br />Np.:<br />[syntax=c]int dlugosc = 4; //tutaj musisz odczytać długość wpisanego tekstu, dla przykładu będą wpisane 4 znaki<br /><br />for(int i=0; i&lt;dlugosc ; i++){<br /><br />    if(tab&#91;i&#93;&lt;0x30 || tab&#91;i&#93;&gt;0x39){<br />    //wpisany znak nie jest cyfrą. Powrót<br />    return 0;<br />    }<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 23 paź 2021, o 18:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danny]]></name></author>
<updated>2021-10-23T17:59:23+01:00</updated>
<published>2021-10-23T17:59:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234058#p234058</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234058#p234058"/>
<title type="html"><![CDATA[Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234058#p234058"><![CDATA[
<div class="quotetitle">danielos napisał(a):</div><div class="quotecontent"><br />Wg mnie najprościej sprawdzać czy zakres każdego znaku mieści się w określonych granicach, w tym przypadku cyfrach 0-9 (albo wg ASCI od 0x30 do 0x39). <br />Pętla i warunek sprawdzający.<br /><br />Np.:<br />[syntax=c]if(tab&#91;0&#93;&lt;0x30 || tab&#91;0&#93;&gt;0x39){<br />//wpisany znak nie jest cyfrą. Powrót<br />return 0;<br />}[/syntax]<br /><br />albo<br /><br />[syntax=c]if(tab&#91;0&#93;&lt;'0' || tab&#91;0&#93;&gt;'9'){<br />//wpisany znak nie jest cyfrą. Powrót<br />return 0;<br />}[/syntax]<br /></div><br /><br /><br />Dzięki, zadziała dla pojedyńczych cyfr 0-9. Pozostaje kwestia liczb całkowitych, ktore powinien pozwolić wpisać.<br /><br />Genaralnie ma w zalezności od 3 podanej wartości (od 1 do 3) sumować, odejmować lub mnożyć dwie pierwsze podane liczby.<br />Jest to zrobione, pozostaje mi tylko zabepieczenie programu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1505">danny</a> — 23 paź 2021, o 17:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2021-10-23T17:46:07+01:00</updated>
<published>2021-10-23T17:46:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234056#p234056</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234056#p234056"/>
<title type="html"><![CDATA[Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234056#p234056"><![CDATA[
Wg mnie najprościej sprawdzać czy zakres każdego znaku mieści się w określonych granicach, w tym przypadku cyfrach 0-9 (albo wg ASCI od 0x30 do 0x39). <br />Pętla i warunek sprawdzający.<br /><br />Np.:<br />[syntax=c]if(tab&#91;0&#93;&lt;0x30 || tab&#91;0&#93;&gt;0x39){<br />//wpisany znak nie jest cyfrą. Powrót<br />return 0;<br />}[/syntax]<br /><br />albo<br /><br />[syntax=c]if(tab&#91;0&#93;&lt;'0' || tab&#91;0&#93;&gt;'9'){<br />//wpisany znak nie jest cyfrą. Powrót<br />return 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 23 paź 2021, o 17:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danny]]></name></author>
<updated>2021-10-23T16:04:59+01:00</updated>
<published>2021-10-23T16:04:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234051#p234051</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234051#p234051"/>
<title type="html"><![CDATA[[Język C] Zabezpieczenie przed wpisaniem litery zamiast cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23993&amp;p=234051#p234051"><![CDATA[
Witam<br /><br />Panowie, w programie użytkownik proszony jest o wprowadzenie kolejno trzech liczb. Jak zabezpieczyć program przed wpisaniem przez użytkownika litery?<br /><br />[syntax=c]printf(&quot;Podaj pierwsza liczbe:&quot;);<br />scanf(&quot;%d&quot;, tab);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1505">danny</a> — 23 paź 2021, o 16:04</p><hr />
]]></content>
</entry>
</feed>