Zum Inhalt springen

C - Problem mit scanf und speichern von Wörtern


Artery

Empfohlene Beiträge

Hallo leute,

ich bin noch ganz neu in C!

Ich habe jetzt schon wirklich über eine Stunde danach gesucht und leider nicht ganz die Antwort gefunden, die ich mir erhofft habe, obwohl das Problem wirklich keins ist :D

Also es soll so sein,

jemand gibt etwas ein ein oder zwei Wörter. Dann soll per scanf das/die Wörter in einer variable gespeichert werden und dann wird per If abgefragt, wenn die variable dann nicht eines der 3 wörter ist soll etwas passieren...

Ich habs bisher so...

#include <stdio.h>

#include <stdlib.h>


int main(int argc, char *argv[])

{

 char ziel;


  printf("Wilkommen zum Bezinrechner 1.0\n");

  printf("Geben sie nun zu erst ein welchen Wer Sie errechnen wollen\n\n");

  printf("\n'Strecke' um die Zurueckgelegte Strecke aus Durschnittsverbrauch und \nverbrauchter Bezinmenge zu errechnen\n");

  printf("\n'Durschnittsverbrauch' um den Durschnittsverbrauch aus zurueckgelegter Strecke \nund verbrauchter Bezinmenge zu errechnen\n");

  printf("\n'verbrauchte Benzinmenge' um die verbrauchte Benzinmenge aus zurueckgelegter \nStrecke und Durschnittsverbrauch zu errechnen\n\n");

  scanf("%c", &ziel);

  if(ziel != "Strecke" || ziel != "Durschnittsverbrauch" || ziel != "verbrauchte Benzinmenge")

          printf("Geben Sie einen 'richtigen' Befehl ein!\n\n");

            else if(ziel == "S")

       printf("1");


  system("PAUSE");	

  return 0;

}

Wäre nett wenn ihr mir weiter helft!

MfG Artery

€dit: Wieso wird mein Profilbild nicht angezeigt? :/

Link zu diesem Kommentar
Auf anderen Seiten teilen

char ziel;
Der Datentyp char bietet Platz für genau 1 Zeichen. So etwas wie "Durschnittsverbrauch" passt da also gar nicht hinein.

In C werden für Zeichenketten (Strings) Arrays von char benutzt, wobei du darauf achten musst, dass das Array groß genug ist: Die Größe muss mindestens die Anzahl der zu speichernden Zeichen + 1 sein. +1 deswegen, weil immer eine Endmarkierung dazugepackt wird. Arrays lassen sich nämlich nicht an Funktionen übergeben, sie degenerieren dann zu Zeigern auf das erste Element, und diese Zeiger tragen nicht mehr die Information in sich, wie groß das Array war. Darum muss das Ende des Strings markiert werden. Alle Stringfunktionen in C erwarten diese Markierung und setzen sie üblicherweise auch selbst.

Du musst also statt eines einzelnen char ein hinreichend großes char-Array benutzen. Die Eingabe mit scanf erfolgt dann mit %s.

Und du kannst Strings in C auch nicht mit == oder != vergleichen. Das heißt, du kannst es tun, aber dabei werden nicht die Zeichenketten verglichen, sondern nur die Speicheradressen. Strings vergleicht man in C mit der Funktion strcmp.

Und noch eins:

if(ziel != "Strecke" || ziel != "Durschnittsverbrauch" || ziel != "verbrauchte Benzinmenge")

Von allen oben angesprochenen Punkten abgesehen, ist diese Abfrage immer wahr. Du verknüpfst hier mehrere Teilbedingungen mit ODER. Es reicht also, wenn eine einzige wahr wird, damit der gesamte Ausdruck wahr wird.

Wenn ziel nicht "Strecke" ist, ist die erste Teilbedingung wahr. Und wenn ziel "Strecke" ist, ist zwar die erste falsch, aber die zweite ist wahr. Die dritte muss gar nicht mehr geprüft werden, weil mindestens eine der ersten beiden Teilbedingungen immer wahr ist.

Was du meinst, ist:

if(ziel != "Strecke" [B]&&[/B] ziel != "Durschnittsverbrauch" [B]&&[/B] ziel != "verbrauchte Benzinmenge")

€dit: Wieso wird mein Profilbild nicht angezeigt? :/

Dein Profilbild wird in deinem Profil angezeigt. Meintest du vielleicht dein Benutzerbild?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay danke es klappt das mit dme abspeichern in "Strings"

Das mit dem Or war ein denkfehler :(

Aber das mit der Funktion zum vergleichen von strings habe ich noch nicht ganz verstanden...

Könntest du mir bitte das richtige beispiel für mein problem mal geben, das wäre äußerst hilfreich =)

MfG Artery

PS: Wieso wird mein Avatar nicht angezeigt? D:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...