<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ctime und Passwortabfrage]]></title><description><![CDATA[<p>Hallo zusammen,<br />
in meinem Lehrbuch finde ich folgenden Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt; //Stringformatierungen mit Parameter
#include &lt;string&gt;
#include &lt;ctime&gt;
using namespace std;

long zeitdiff(void);

static string geheimwort = &quot;ISUS&quot;;
static long maxanzahl = 3, maxzeit = 60;

bool getPassword()
{
	bool ok_flag = false;
	string wort;
	int anzahl = 0, zeit = 0;
	zeitdiff();
	while(ok_flag != true &amp;&amp; ++anzahl &lt;= maxanzahl)
	{
		cout &lt;&lt; &quot;\n\nGeben Sie das Passwort ein:  &quot;;
		cin.sync();
		cin &gt;&gt; setw(20) &gt;&gt; wort;
		zeit += zeitdiff();
		if(zeit &gt;= maxzeit)
			break;
		if(wort != geheimwort)
			cout &lt;&lt; &quot;Passwort ungültig!&quot; &lt;&lt; endl;
		else
			ok_flag = true;
	}
	return ok_flag;
}

time_t zeitdiff()
{
	static long sek = 0;
	time_t altsek = sek;
	time(&amp;sek);
	return (sek - altsek)
}
</code></pre>
<p>Nun lässt sich dieser Code aber nicht kompilieren. Zum einen verwirrt mich die Deklaration des Prototyps, da dieser einen long Wert zurückgibt, doch die Funktion eigentlich was anderes machen soll.</p>
<p>Nun frage ich mich folgendes:</p>
<p>Ist es mit einer solchen kurzen Funktion möglich, eine Stoppfunktion einzurichten? Hier soll die Passwortabfrage nämlich maximal für 30 Sekunden zulässig sein.</p>
<p>Muss hier cin.sync() stehen? Ist das absolut notwendig? Ich sehe keinen Unterschied.</p>
<p>Herzlichen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270765/ctime-und-passwortabfrage</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 23:03:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270765.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Jul 2010 19:36:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ctime und Passwortabfrage on Sat, 17 Jul 2010 19:36:06 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
in meinem Lehrbuch finde ich folgenden Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt; //Stringformatierungen mit Parameter
#include &lt;string&gt;
#include &lt;ctime&gt;
using namespace std;

long zeitdiff(void);

static string geheimwort = &quot;ISUS&quot;;
static long maxanzahl = 3, maxzeit = 60;

bool getPassword()
{
	bool ok_flag = false;
	string wort;
	int anzahl = 0, zeit = 0;
	zeitdiff();
	while(ok_flag != true &amp;&amp; ++anzahl &lt;= maxanzahl)
	{
		cout &lt;&lt; &quot;\n\nGeben Sie das Passwort ein:  &quot;;
		cin.sync();
		cin &gt;&gt; setw(20) &gt;&gt; wort;
		zeit += zeitdiff();
		if(zeit &gt;= maxzeit)
			break;
		if(wort != geheimwort)
			cout &lt;&lt; &quot;Passwort ungültig!&quot; &lt;&lt; endl;
		else
			ok_flag = true;
	}
	return ok_flag;
}

time_t zeitdiff()
{
	static long sek = 0;
	time_t altsek = sek;
	time(&amp;sek);
	return (sek - altsek)
}
</code></pre>
<p>Nun lässt sich dieser Code aber nicht kompilieren. Zum einen verwirrt mich die Deklaration des Prototyps, da dieser einen long Wert zurückgibt, doch die Funktion eigentlich was anderes machen soll.</p>
<p>Nun frage ich mich folgendes:</p>
<p>Ist es mit einer solchen kurzen Funktion möglich, eine Stoppfunktion einzurichten? Hier soll die Passwortabfrage nämlich maximal für 30 Sekunden zulässig sein.</p>
<p>Muss hier cin.sync() stehen? Ist das absolut notwendig? Ich sehe keinen Unterschied.</p>
<p>Herzlichen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927823</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sat, 17 Jul 2010 19:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to ctime und Passwortabfrage on Sat, 17 Jul 2010 20:35:30 GMT]]></title><description><![CDATA[<p>Ja, sehr zweifelhafter Code...</p>
<blockquote>
<p>&gt; static string geheimwort = &quot;ISUS&quot;;</p>
</blockquote>
<p>static ist unnötig. Da die Variable eh im globalen Namensraum definiert wurde liegt sie nun im statischen Speicher bis das Programm beendet ist. Schlechtes Design ist es allemal.</p>
<blockquote>
<p>&gt; da dieser einen long Wert zurückgibt,</p>
</blockquote>
<p>Ja, das ist auch fatal. Der Autor geht davon aus, dass time_t und long (wie groß long auch immer sein mag) gleich groß sind. Bei mir ist es z.B. so definiert:</p>
<pre><code class="language-cpp">typedef __time64_t time_t;      /* time value */
typedef __int64 __time64_t;     /* 64-bit time value */
</code></pre>
<p>Woanders kann es aber ganz anders sein. Bei mir entspricht time_t nicht long.</p>
<blockquote>
<p>&gt; Muss hier cin.sync() stehen?</p>
</blockquote>
<p>Das Thema hatten wir hier erst (bzgl. flushen von std::istream), mal braucht mans, mal nicht. Der Standard drückt das leider nur Salopp aus und sync() arbeitet auf verschiedenen OSses leider unterschiedlich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>So kompiliert der Code auf jeden Fall (wenn auch in einem sehr C-artigem Design)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt; //Stringformatierungen mit Parameter
#include &lt;string&gt;
#include &lt;ctime&gt;
using namespace std;

time_t zeitdiff();

string geheimwort = &quot;ISUS&quot;;
long maxanzahl = 3;
time_t maxzeit = 60;

bool getPassword()
{
    bool ok_flag = false;
    string wort;
    int anzahl = 0;
	time_t zeit = 0;
    zeitdiff();
    while(ok_flag != true &amp;&amp; ++anzahl &lt;= maxanzahl)
    {
        cout &lt;&lt; &quot;\n\nGeben Sie das Passwort ein:  &quot;;
        cin.sync();
        cin &gt;&gt; setw(20) &gt;&gt; wort;
        zeit += zeitdiff();
        if(zeit &gt;= maxzeit)
            break;
        if(wort != geheimwort)
            cout &lt;&lt; &quot;Passwort ungültig!&quot; &lt;&lt; endl;
        else
            ok_flag = true;
    }
    return ok_flag;
}

time_t zeitdiff()
{
    static time_t sek = 0;
    time_t altsek = sek;
    time(&amp;sek);
    return (sek - altsek);
} 

int main() {
	cout &lt;&lt; boolalpha &lt;&lt; getPassword();
}
</code></pre>
<blockquote>
<p>&gt; Ist es mit einer solchen kurzen Funktion möglich, eine Stoppfunktion einzurichten?</p>
</blockquote>
<p>Ja, nur kann sie natürlich nicht std::cin beim Einlesen abbrechen (da synchrones I/O).</p>
<p>Ich rate dir zu einem neuen Lehrbuch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927845</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sat, 17 Jul 2010 20:35:30 GMT</pubDate></item><item><title><![CDATA[Reply to ctime und Passwortabfrage on Sat, 17 Jul 2010 23:54:55 GMT]]></title><description><![CDATA[<p>Ich bin gerade mit dem gleichen Buch beschäftigt und mag es bisher sehr gern.</p>
<p>Ad aCTa schrieb:</p>
<blockquote>
<p>Ja, sehr zweifelhafter Code...</p>
<blockquote>
<p>&gt; static string geheimwort = &quot;ISUS&quot;;</p>
</blockquote>
<p>static ist unnötig. Da die Variable eh im globalen Namensraum definiert wurde liegt sie nun im statischen Speicher bis das Programm beendet ist. Schlechtes Design ist es allemal.</p>
<p>(...)</p>
</blockquote>
<p>Mein Buch schrieb:</p>
<blockquote>
<p>Im Gegensatz zu globalen Objekten wird der Name eines statischen Objekts dem Linker nicht bekannt gegeben. Dadurch ergibt sich sein &quot;privater&quot; Charakter in einem Modul.</p>
</blockquote>
<p>Hier sollte, glaube ich, einfach eine Feinheit beschrieben werden.</p>
<p>Edit: Wurde <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-157662.html" rel="nofollow">hier</a> auch schonmal thematisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927911</guid><dc:creator><![CDATA[SchlippSchlapp]]></dc:creator><pubDate>Sat, 17 Jul 2010 23:54:55 GMT</pubDate></item><item><title><![CDATA[Reply to ctime und Passwortabfrage on Sun, 18 Jul 2010 07:39:32 GMT]]></title><description><![CDATA[<p>Hallo,<br />
vielen Dank für die Erklärung. Eigentlich bin ich mit dem Buch sehr zufrieden, da es sehr gut aufgebaut ist und sehr viel Beispielcode biete. Dennoch sind immer wieder Codeschnipsel dazwischen, mti denen ich nicht einverstanden bin und dann euch zeige, damit ihr da mal drüber schaut ;). Mich hat vor allem das Gleichsetzen von long unt time_t verwirrt. Aber Du hast es mir ja nun eklärt.</p>
<p>Bis dann<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927946</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sun, 18 Jul 2010 07:39:32 GMT</pubDate></item></channel></rss>