Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Folgende Aufgabenstellung:

Abfrage: "Antworten Sie mit Ja (j) oder Nein (n):"

Ausgabe: "Sie haben mit Nein geantwortet", "Sie haben mit ja geantwortet" oder "Sie haben eine falsche Eingabe gemacht."

Hinweise: Hier muss man Verzweigungen verwenden. Die Syntax für das if-Konstrukt ist gleich wie bei Java. Der Datentyp für die einzulesende Variable ist char. Einzelne Zeichen werden als Konstanten immer zwischen einfache Anführungszeichen gesetzt, z.B. 'a'.

Folgendes Programm habe ich darauf geschrieben. Wo ist jetzt aber der Fehler?!

//---------------------------------------------------------------------------

#pragma hdrstop

#include <stdio.h>

#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused

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

{

char antwort

printf("Antworten Sie mit JA (j) oder NEIN (n):");

scanf("%c", &antwort);

//---------------------BedingungBEGINN----------------------

if (c == 'j')

{

printf("Sie haben mit JA geantwortet");

}

if (c == 'n')

{

printf("Sie haben mit NEIN geantwortet");

}

if ((!c=='j')||(!c=='n'))

{

printf("Sie haben eine falsche Eingabe gemacht");

}

//---------------------BedingungENDE-----------------------

return 0;

}

//---------------------------------------------------------------------------

Geschrieben

Danke erst einmal für die schnelle Antwort.

Laut Borland C++ Builder kommt folgende Fehlermeldung:

[C++ Fehler] abfrage.cpp(15): E2141 Fehler in der Deklarationssyntax

Er meint damit folgende Zeile:

printf("Antworten Sie mit JA (j) oder NEIN (n):");

Geschrieben
Er meint damit folgende Zeile:

Sofern kein Copy&Paste-Fehler vorliegt, dürfte es sich eher um die Zeile darüber handeln, da dort das abschließende Semikolon fehlt.

Folgendes fällt mir jedenfalls spontan auch noch auf:

if ((!c=='j')||(!c=='n'))

Das wird jedenfalls nicht zum gewünschten Ergebnis führen, da erst die Negation und anschließend der Vergleich durchgeführt wird.

Stattdessen:

if ((!(c=='j'))||(!(c=='n')))
oder:
if (!(c=='j' || c=='n'))
oder aber auch einfach folgendes Konstrukt, welches die letzte Abfrage ersparen würde:
if (...)

{

   ...

}

else if (...)

{

   ...

}

else

{

   ...

}

Geschrieben (bearbeitet)

char antwort;

[Editerle]

hmm, zu langsam.

oder aber auch einfach folgendes Konstrukt, welches die letzte Abfrage ersparen würde:

if (...)

{

   ...

}

else if (...)

{

   ...

}

else

{

   ...

}

Lieber switch, ist, nach meiner Meinung, übersichtlicher.

Bearbeitet von TDM
Geschrieben

Stattdessen:

if ((!(c=='j'))||(!(c=='n')))
oder:
if (!(c=='j' || c=='n'))

Das ist nicht das gleiche. Wenn du das ! ausklammerst, musst du || gegen && austauschen.

Der zweite Ausdruck ist übrigens der richtige, denn der erste ist immer wahr.

Geschrieben

Also folgende Beispiele funktionieren nun beide (endlich :D) :

//---------------------------------------------------------------------------


#pragma hdrstop


#include <stdio.h>

#include <conio.h>

//---------------------------------------------------------------------------


#pragma argsused

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

{


char antwort;


	printf("Antworten Sie mit JA  oder NEIN");

	scanf("%c",&antwort);


//---------------------BedingungBEGINN----------------------


  if (antwort=='j')

  {

     printf("Sie haben mit JA geantwortet");

  }

  else if (antwort == 'n')

  {

     printf("Sie haben mit NEIN geantwortet");

  }

     else

     {

        printf("Sie haben eine falsche Eingabe gemacht");

     }


//---------------------BedingungENDE-----------------------

        return 0;

}

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------


#pragma hdrstop


#include <stdio.h>

#include <conio.h>

//---------------------------------------------------------------------------


#pragma argsused

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

{


char antwort;


	printf("Antworten Sie mit JA  oder NEIN");

	scanf("%c",&antwort);


//---------------------BedingungBEGINN----------------------


	if (antwort == 'j')

	   {

	   printf("Sie haben mit JA geantwortet");

	   }

	if (antwort == 'n')

	   {

	   printf("Sie haben mit NEIN geantwortet");

	   }

	if (!(antwort=='j' || antwort=='n'))

	   {

	   printf("Sie haben eine falsche Eingabe gemacht");

	   }


//---------------------BedingungENDE-----------------------

        return 0;

}

//---------------------------------------------------------------------------

Jetzt mal die nächste Frage: Wie mach ich das jetzt nun, das er mir auch die Großbuchstaben J für JA und N für NEIN akzeptiert?!

Geschrieben

Jetzt mal die nächste Frage: Wie mach ich das jetzt nun, das er mir auch die Großbuchstaben J für JA und N für NEIN akzeptiert?!

Indem du die Eingabe vor der Auswertung in Kleinbuchstaben umwandelst:

antwort=tolower(antwort);
Dafür brauchst du
#include <cctype>

Übrigens sieht dein Code eher nach C als nach C++ aus.

Geschrieben

Ok, das Problem hat sich nun auch gelöst! :D

Das fängt ja richtig an Spaß zu machen :P

//---------------------------------------------------------------------------


#pragma hdrstop


#include <stdio.h>

#include <conio.h>

//---------------------------------------------------------------------------


#pragma argsused

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

{


char antwort;


	printf("Antworten Sie mit JA  oder NEIN");

	scanf("%c",&antwort);


//---------------------BedingungBEGINN----------------------


  if (antwort=='j' || antwort=='J')

  {

     printf("Sie haben mit JA geantwortet");

  }

  else if (antwort == 'n' || antwort=='N')

  {

     printf("Sie haben mit NEIN geantwortet");

  }

     else

     {

        printf("Sie haben eine falsche Eingabe gemacht");

     }


//---------------------BedingungENDE-----------------------

        return 0;

}

//---------------------------------------------------------------------------

Geschrieben
Warum eigentlich conio.h?

Hab ich mich auch schon gefragt, aber das steht so auf unseren Übungsblättern und so schreib ich das einfach ab :D

Was bedeutet denn dieses conio.h ?!:eek

Geschrieben
Was bedeutet denn dieses conio.h ?!:eek
Das ist eine nicht standardisierte Headerdatei, die Deklarationen von Hilfsfunktionen zur Ein/Ausgabe auf der Konsole enthält (Console I/O).

Da drin stehen üblicherweise Funktionen wie getch und gotoxy. Die Inhalte können aber von Compiler zu Compiler unterschiedlich sein.

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...