C Programmierung - Eingabeaufforderung in "switch"

Hallo. Ich habe folgendes Problem. Ich möchte eine sehr lange "switch" schleife erstellen, aber in der "switch" Schleife kann ich keine Eingabeaufforderung machen.
Hier das Programm:

#include<stdio.h>
main()
{
char a;
int b;
printf("Yes or no?");
scanf("%c", &a);
switch(a)
{
case 'Y' :
case 'y' :
case 'E':
case 'e':
case 'S':
case 's':
printf("Great");
break;
case 'N':
case 'n':
case 'o':
case 'O':
printf("Enter a number");
scanf("%d", & b);
break; }

}
Habe ich No/no eingegeben, erscheint für 1sek "Enter a number" und anschließend wird das Programm geschlossen.

Ich hoffe ihr könnt mir weiter helfen. ^^




MfG. bigyiatch
 
AW: C Programmierung - Eingabeaufforderung in "switch"

Hallo,

so ganz habe ich nicht verstanden, was du mit deinem Code erreichen willst...
Deine Variable a stellt ja nur ein einzelnes Zeichen dar ... du benötigst an dieser Stelle aber einen "String" ... also ein Char Array (z.B. a[3]) um dein no eingeben zu können ...
 
AW: C Programmierung - Eingabeaufforderung in "switch"

Ja, es stellt nur 1 Zeichen dar, aber wenn ich z.B "Yes" eingebe funktioniert es.
Also für 1. case ist es ja daselbe wenn man y, Y, e, E, s, S eingibt.


Ich möchte nun in der "switch" schleife eine Eingabeaufforderung reinschreiben, die erscheint nachdem ich "No" eingegeben habe, damit ich mehrere "switch" schleifen in der 1 reinschreiben kann.
Nur gebe ich jetzt z.B No ein, wird der Text: "Enter a number" nur für 1sek angezeigt, und ich kann keine Zahl eingeben.
 
Zuletzt bearbeitet:
AW: C Programmierung - Eingabeaufforderung in "switch"

Hi bigyiatch,

-so schreibt man weder eine Texteingabe noch einen Textvergleich

wie "mbhlr0815" schon geschrieben hat, bei der eingabe von mehr als einem Zeichen
hat dein Programm ein Problem...

versuch mal das hier :

Code:
#include <stdio.h>
#include <ctype.h> 

int main(void)
{
  char a[80];
  int b;

  // Stringeingabe
  printf("Yes or no?");
  scanf("%s", a);
 
  // String in Grossbuchstaben wandeln
  for(b=0;a[b];b++) {    
    a[b]=toupper(a[b]);
  }

  // Stringvergleich
  if(strcmp(a,"YES")==0) {
    printf("Great");
  }
  else if(strcmp(a,"NO")==0) {
    printf("Enter a number");
    scanf("%d", &b);
  }

  return(0);
}

- bei Eingabe von mehr als 80 Zeichen gibts aber auch hier ein Problem 8)

Gruss Uwe
 
AW: C Programmierung - Eingabeaufforderung in "switch"

Ja, aber wie ich bereits gesagt habe, das Programm klappt ohne Probleme.
Gebe ich "Yes" oder "yes" ein, zeigt er mir "Great" an, und schließt sich dann.

Ich möchte nur eine Eingabeaufforderung in der "switch" schleife machen. Doch so wie ich das gemacht habe geht es anscheinend nicht, denn wenn ich "No" eingebe, zeigt er mir nur für 1sek "Enter a number" an und schließt sich dann.
 
AW: C Programmierung - Eingabeaufforderung in "switch"

und wie ich bereits geschrieben habe darfst du bei der definition

Code:
scanf("%c", &a);

nicht mehr als EIN Zeichen eingeben


...geb doch mal zum spass nur "n" ein....dann kommt dein Programm auch
bis zur Zahleneingabe und funktioniert ganz wie es soll

also macht hier nicht das Programm einen Fehler sondern du,
weil du zwei Zeichen eingibst

...glaubs mir oder lass es 8)

Gruss uwe
 
AW: C Programmierung - Eingabeaufforderung in "switch"

Ja, aber wie ich bereits gesagt habe, das Programm klappt ohne Probleme.
Gebe ich "Yes" oder "yes" ein, zeigt er mir "Great" an, und schließt sich dann.

Ich möchte nur eine Eingabeaufforderung in der "switch" schleife machen. Doch so wie ich das gemacht habe geht es anscheinend nicht, denn wenn ich "No" eingebe, zeigt er mir nur für 1sek "Enter a number" an und schließt sich dann.


Hi bigyiatch!

Das Problem liegt daran, dass der Tastaturpuffer nicht entleert worden ist und deshalb musst du hinter jedem scanf(..) zusätzlich eine Zeile fflush(stdin); einbauen!

Beispiel:

HTML:
	char a;
	int b;
	
	printf("Yes or no?");
	scanf("%c", &a);
	fflush(stdin);                            <----------------- Neu

	switch(a)
	{
		case 'Y' :
		case 'y' :
		case 'E':
		case 'e':
		case 'S':
		case 's':
			printf("Great");
			break;
		case 'N':
		case 'n':
		case 'o':
		case 'O':
			printf("Enter a number");
			scanf("%d", &b);
			fflush(stdin);             <----------------- Neu
			break;
	}

Vorsicht:
Die Funktion scanf() ist nicht gegen einen Pufferüberlauf (Buffer-Overflow) geschützt und somit unsicher, d. h., sie könnte für einen Hack des Programms durch eine andere Person missbraucht werden. Damit ist gemeint, dass die Funktion nicht die Anzahl der eingegebenen Zeichen überprüft und es damit zu Fehlern kommen kann bzw. ein Fehlverhalten von außen provoziert werden kann. Abgesehen davon ist scanf() (und auch printf()) ein guter Kanidat für Format String Exploits. Viele Compiler monieren scanf() auch als unsichere Funktion. Der Compiler von Microsoft VC++ z. B. rät, stattdessen die Funktion scanf_f()zu verwenden. Beachten Sie hierbei allerdings, das scanf_f() keine Standard-C-Funktion und somit auch nicht portabel ist.

Viel Erfolg! ;-)
 
Zuletzt bearbeitet:

Jobs

Jobmail abonieren - keine Jobs mehr verpassen:

Top