Passwort in Sternchen anzeigen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Passwort in Sternchen anzeigen

Beitrag von +Fuss+ » Fr Nov 14, 2008 11:23 pm

Hallo,
Ich fange gerade damit an, programmieren zu lernen.
Jetzt habe ich ein ganz einfaches Prog. geschrieben, das einen bestimmten Text ausgibt, wen man das richtige Passwort eingibt:

Code: Alles auswählen

#include <stdio.h>
#include <conio.h>

int main()
{
int eingabe;
printf ("Geben sie das Passwort ein!\nPasswort: ");
scanf ("%d",&eingabe);
if (eingabe == 1333) printf ("Das Passwort ist richtig!\nDie Nachricht ist:\nHallo!!!");
if (eingabe != 1333) printf ("Das Passwort ist falsch!");
getch();
return 0;
}
leider wird das Passwort beim eingeben (scanf) angezeigt.
wie muss ich das Prog. umschreiben, damit beim Eingeben nur Sternchen angezeigt werden??

Schonmal Danke für die Antworten

MfG
+Fuss+

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Passwort in Sternchen anzeigen

Beitrag von Kerli » Sa Nov 15, 2008 12:49 am

+Fuss+ hat geschrieben:Hallo,
Hallo, willkommen im Forum :)
+Fuss+ hat geschrieben:Ich fange gerade damit an, programmieren zu lernen.
Dann bist du bei uns ja genau richtig.
+Fuss+ hat geschrieben:leider wird das Passwort beim eingeben (scanf) angezeigt.
wie muss ich das Prog. umschreiben, damit beim Eingeben nur Sternchen angezeigt werden??
Das ist leider nicht so einfach zu realisieren, da es keine einheitliche Möglichkeit gibt einzelne Zeichen einzulesen bzw. ausgeben ohne die Bestätigung mit [Enter].
Unter Linux kannst du zum Beispiel die ncurses Bibliothek verwenden, oder unter Windows kannst du es zb so versuchen:

Code: Alles auswählen

#include <conio.h>
#include <stdio.h>
#include <stdlib.h> // für atoi()

int main()
{
  printf ("Geben sie das Passwort ein!\nPasswort: ");

  char pass[11];
  char read;
  int counter = 0;

  while( (read = _getch()) != '\n' )
  {
    printf("\b*"); // \b steht für Backspace
    fflush(stdout);
    if( counter < 10 )
      pass[counter++] = read;
    else
    {
      pass[10] = '\0';
      break;
    }
  }

  if( atoi(pass) == 1333 ) printf ("Das Passwort ist richtig!\nDie Nachricht ist:\nHallo!!!");
  else printf ("Das Passwort ist falsch!");

  return 0;
}
Ich habe den Code jetzt nicht getestet, aber eigentlich sollte er funktionieren. Wenn du etwas nicht verstehst dann frag einfach.

Hast du eigentlich schon einmal etwas von 'else' gehört? Deine zwei 'if's sind nämlich nicht unbedingt schön. Und Codeausschnitte bitte immer in 'code' Tags schreiben, damit man die Beiträge einfacher lesen kann.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: Passwort in Sternchen anzeigen

Beitrag von +Fuss+ » Sa Nov 15, 2008 9:34 am

Danke für die schnelle antwort!
Ich werde denn Code gleich mal testen!
Ihr bekmmt dann eine antwort ob es funktioniert oder nicht!

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: Passwort in Sternchen anzeigen

Beitrag von +Fuss+ » Sa Nov 15, 2008 10:23 am

Also:
Turbo C zeigt an, das der Quellcode 15 Fehler enthällt!
Der 1. ist bei "char pass"
Ich hab aber i-wo auf dem Rechner noch einen Quellcode für eine Anmeldung an einem Server. Da wird das Passwort beim tippen gar nicht angezeigt.
Ich schau mal ob ich da was abschauen kann...

MfG +Fuss+

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Passwort in Sternchen anzeigen

Beitrag von nufan » Sa Nov 15, 2008 10:40 am

Von mir auch ein herzliches Willkommen! :)
+Fuss+ hat geschrieben:Turbo C zeigt an, das der Quellcode 15 Fehler enthällt!
TurboC... du kommst von tutorials.at, hab ich recht ;)
TurboC ist... nicht zu empfehlen. Wenn du wissen willst, welche Compiler/Entwicklungsumgebungen gut sind und wie man sie einrichtet, lies bitte diesen Artikel im Wiki:
http://tutorial.proggen.org/doku.php?id ... iler:start

BTW: Borland gibt keine einzige Fehlermeldung aus, nur eine Warnung wegen "getch".

Kerli's Programm funzt nicht ganz. Wenn man Zeichen eingibt wird nur 1 Stern ausgegeben und die Abbruchbedingung funktioniert auch nicht richtig. Dieser Code funktioniert bei mir:

Code: Alles auswählen

#include <conio.h>
#include <stdio.h>
#include <stdlib.h> // für atoi()

int main()
{

  char pass[11];
  char read;
  int counter = 0;

  printf ("Geben sie das Passwort ein!\nPasswort: ");

  while( (read = getch()) != 13 && read != 10)                  // Enter kann 10 und 13 sein
  {

    printf(" \b*"); // \b steht für Backspace                      // WICHTIG: Leerzeichen vor dem '\'  !!!
    fflush(stdout);

    if( counter < 10 )
      pass[counter++] = read;

    else
    {
      pass[10] = '\0';
      break;
    }

  }


  if( atoi(pass) == 1333 )
    printf ("\nDas Passwort ist richtig!\nDie Nachricht ist:\nHallo!!!");

    else
      printf ("\nDas Passwort ist falsch!");

  getch ();                                                                             // wenn schon, denn schon ;)
  return 0;

}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Passwort in Sternchen anzeigen

Beitrag von Xin » Sa Nov 15, 2008 11:43 am

Moin Fuss!

Das Programm mit Backspace ('\b') erfüllt seinen Zweck nur halb, denn was passiert ist natürlich, dass der Buchstabe über die Verbindung übertragen wird und anschließend ein Backspace - was auf dem Bildschirm den Buchstaben löscht. Die Netzwerkverbindungen kann man absichern - lässt sich jedoch jemand das Logfile der Konsole - von der Du das eingegeben hast anzeigen, steht da eben Buchstabe und Backspace drin.

Für eine Programmierübung ist das vollkommen in Ordnung - für hochgradige Sicherheit wirst Du ncurses (unter Linux) verwenden müssen. Dort kannst Du die Key-Events einzeln abfangen und einstellen, dass keine Ausgabe erfolgen soll.

Was den Compiler angeht, rate ich Dir ebenfalls zu etwas aus diesem Jahrtausend, die meiste Unterstützung findest hier Du wie allgemein bei Verwendung des GCC-Compilers, welcher Dich ebenfalls bei einem Wechsel zu Linux begleiten würde. Der Wechsel zu Linux mag zurzeit nicht gewünscht sein, aber irgendwie ergibt er sich bei vielen Entwicklern.


Ansonsten selbstverständlich ebenfalls willkommen im Forum, ich freue mich immer, wenn sich die Leute im Brett Uservorstellung verewigen und würde mich freuen, DIch nicht nur als Mitglied im Board sondern auch als Mitglied unserer kleinen Community zu begrüßen.

Viel Spaß hier.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: Passwort in Sternchen anzeigen

Beitrag von +Fuss+ » Sa Nov 15, 2008 11:50 am

OK
werde mir jetzt einen anderen Compiler herunterladen.
Ich möchte aber noch eine Sache mit Turbo C (ist wirklich von tuorials.at, da hab ich auch schon viel gelernt!)
fertig machen:

Code: Alles auswählen

#include <stdio.h>
#include <conio.h>

int main()
{
int eingabe, abbruch = 0;
printf ("\nGeben sie das Passwort ein!\nPasswort: ");
while (eingabe != 1234)
  {
  scanf ("%d",&eingabe);
  if (eingabe == 1234) printf ("Das Passwort ist richtig!\nDie Nachricht ist:\nIch heiße Dennis!!!");
  else printf ("Das Passwort ist falsch!\nPasswort: ");
  }
getch();
return 0;
}
Ich habe noch die Variable abbruch hinzugefügt und möchte, dass das Programm beendet wird, sobald man 3 mal ein falschen Passwort eingegeben hat.
Wie schaffe ich, dass die Variable mitzählt wie oft das Passwort falsch eingegeben wurde? Mit "abbruch++" und "if abbruch > 3" ???
Wer das Passwort nicht kennt steckt ja sonst in einer Endlosschleife...


Außerdem wollte ich noch fragen, ob jemand noch eine gute Seite oder so weiß, wo man mehr über den Umgang mit C lernt und auch Beispiele für verschiedene Codes findet.

MfG +Fuss+
Zuletzt geändert von +Fuss+ am Sa Nov 15, 2008 11:56 am, insgesamt 1-mal geändert.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Passwort in Sternchen anzeigen

Beitrag von nufan » Sa Nov 15, 2008 11:54 am

Also du willst "abbruch" als counter verwenden?
Dafür eignet sich eine for-Schleife
Dann müsste der Schleifenkopf so heißen:

Code: Alles auswählen

for (abbruch = 0; eingabe != 1234 && abbruch < 3; abbruch++)
+Fuss+ hat geschrieben:Außerdem wollte ich noch fragen, ob jemand noch eine gute Seite oder so weiß, wo man mehr über den Umgang mit C lernt und auch Beispiele für verschiedene Codes findet.
http://proggen.org/doku.php?id=c:start
;)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Passwort in Sternchen anzeigen

Beitrag von Dirty Oerti » Sa Nov 15, 2008 12:31 pm

Auch von mir ein herzliches Tag :)

Deine Suche nach einer Seite mit Infos und Beispielen zu C kannst du eigentlich doch beenden :)
Du bist hier richtig. Im Wiki findest du ein Tutorial zu C, und mit Beispielen können wir dich hier im Forum gerne versorgen.
Wenn du eine Frage hast, dann stelle sie. Da zur Zeit noch nicht allzu viele Fragen kommen, können wir jede speziell behandeln :)

MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Passwort in Sternchen anzeigen

Beitrag von Xin » Sa Nov 15, 2008 12:35 pm

+Fuss+ hat geschrieben:werde mir jetzt einen anderen Compiler herunterladen.
Ich möchte aber noch eine Sache mit Turbo C (ist wirklich von tuorials.at, da hab ich auch schon viel gelernt!)
Tu Dir einen Gefallen und verzeichne das als viel Halbwissen.
Insbesondere alles, was Du mit scanf() machst, vergiss bitte wieder.
+Fuss+ hat geschrieben:Ich habe noch die Variable abbruch hinzugefügt und möchte, dass das Programm beendet wird, sobald man 3 mal ein falschen Passwort eingegeben hat.
Wie schaffe ich, dass die Variable mitzählt wie oft das Passwort falsch eingegeben wurde? Mit "abbruch++" und "if abbruch > 3" ???
Wer das Passwort nicht kennt steckt ja sonst in einer Endlosschleife...
Die Lösung hast Du ja bereits gesagt. Genauso geht's.
Ich würde allerdings die Frage anders stellen.
Solange Passwort nicht dreimal falsch eingegeben => Passwort eingeben => if Passwort richtig { ganz toll; break (raus aus der Schleife) } else abbruch++;
+Fuss+ hat geschrieben:Außerdem wollte ich noch fragen, ob jemand noch eine gute Seite oder so weiß, wo man mehr über den Umgang mit C lernt und auch Beispiele für verschiedene Codes findet.
Es gibt nicht nur forum.proggen.org, es gibt auch proggen.org ;-)

Wir arbeiten derzeit an dem C-Tutorial, welches aber bereits jetzt ausführlicher ist als das auf tutorials.at.
Du darfst Dich gerne als Beta-Tester bereiterklären und wirst hier sicherlich schneller Antworten zu proggen-Tutorial finden, denn hier sind die Leute vertreten, die es geschrieben haben, sich also auch mit Deiner Frage beschäftigen werden und ggfs. das Tutorial verbessern werden.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten