A
A
Arsen002020-11-27 23:23:17
C++ / C#
Arsen00, 2020-11-27 23:23:17

How to read from scanf multiple times?

I'm making a program that converts from Decimal to Octal and vice versa.
After you first enter a number into scanf for a menu selection, there is no way to change your selection on the next pass in the loop. The program simply goes into an infinite loop when you enter, for example, four
. I need the program to ask for a choice in the auswahl variable on each pass of the loop.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h> 


main()
{

  char auswahl;

  do
  {
  //	Auswahlmenü:
    printf("**************** Menue ******************\n"
      "*					*\n"
      "*1)	Konvertierung Dezimal zu Oktal	*\n"
      "*2)	Konvertierung Oktal zu Dezimal	*\n"
      "*3)		Abbruch			*\n"
      "*					*\n"
      "**************** ****** *****************\n\n");

    // Wert einlesen:
    int gelesenerWert = scanf("%1c", &auswahl); // ПРОБЛЕМА ЗДЕСЬ

    // Überprüfung:
    if (gelesenerWert == 1)
    {

      // Ungültige Eingaben:
      if (auswahl != '1' && auswahl != '2' && auswahl != '3')
      {
        printf("Ungueltige Eingabe. Bitte erneut versuchen.\n");
      }

      // Fall 1: Dezimal zu Oktal
      if (auswahl == '1')
      {

      }

      // Fall 2: Oktal zu Dezimal
      else if (auswahl == '2')
      {

      }

      // Fall 3: Abbruch
        continue;


      
    }
    else
    {
      printf("Ungueltige Eingabe. Bitte erneut versuchen.\n");
    }
  } while (auswahl != '3');

}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
AlexDyuba, 2020-11-28
@Arsen00

try this code: before scanf, function rewind(stdin);
#define _CRT_SECURE_NO_WARNINGS
#include
#include
main()
{
char auswahl;
do
{
// Auswahlmenü:
printf("******************** Menue ******************\n"
"* * \n"
"*1) Konvertierung Dezimal zu Oktal *\n"
"*2) Konvertierung Oktal zu Dezimal *\n"
"*3) Abbruch *\n"
"* *\n"
"******* *********** ****** *****************\n\n");
rewind(stdin);
// Wert einlesen:
int gelesenerWert = scanf("%1c", &auswahl);
if (gelesenerWert == 1)
{
// Ungültige Eingaben:
if (auswahl != '1' && auswahl != '2' && auswahl != '3')
{
printf("Ungueltige Eingabe. Bitte erneut versuchen.\n" );
}
// Fall 1: Dezimal zu Oktal
if (auswahl == '1')
{
}
// Fall 2: Oktal zu Dezimal
else if (auswahl == '2')
{
}
// Fall 3: Abbruch
continue;
}
else
{
printf("Ungueltige Eingabe. Bitte erneut versuchen.\n");
}
} while (auswahl ! = '3');
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question