scanf zum schluss wird nicht mehr aufgerufen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • scanf zum schluss wird nicht mehr aufgerufen?

    Hallo allerseits, ich hab ein kleiens Problem mit einem Programm. Alles funktioniert wunderbar, allerdings ruft er die scanf am Schluss, wo
    man die Schleife erneut aufrufen könnte nicht mehr auf. Ich komm nicht mehr weiter.. Hab weder Fehlermeldungen noch Warnungen. Kann mir jemand kurz Hilfestellung geben?
    (Ja, ich weiß, ich bin noch Anfänger ;)
    Ich arbeite mit Visual Studio 2010.

    Die Funktionen und Funktionsprototypen sind in anderen Dateien untergebracht und funktionieren wnuderbar. Daher hier mal nur die Hauptfunktion.

    C-Quellcode

    1. #include "stdafx.h"
    2. #include "Funktionen.h"
    3. #include <iostream>
    4. using namespace System;
    5. int main(array<System::String ^> ^args)
    6. {
    7. float tempEin, tempAus;
    8. int eingabe, eingabe1, eingabe2;
    9. char antwort;
    10. printf("Willkommen bei der Temperaturumrechnungsanwendung.\n\n");
    11. do{
    12. printf("Wählen Sie die Skala der einzugebenden Temperatur: \n");
    13. printf("1:\tFahrenheit\n2:\tCelsius\n3:\tKelvin\n\n");
    14. scanf("%i", &eingabe1);
    15. eingabe1 = eingabe1 * 10;
    16. printf("\n\nWählen Sie die Skala, in die umgerechnet werden soll: \n");
    17. printf("1:\tFahrenheit\n2:\tCelsius\n3:\tKelvin\n\n");
    18. scanf("%i", &eingabe2);
    19. eingabe = eingabe1 + eingabe2;
    20. /* Bis hierhin wurde nur bestimmt, was für Dimensionen umgerechnet werden sollen.
    21. Es folgt der umzurechnende Wert. Durch die Eingabe ist ein zweistelliger Wert
    22. definiert worden. Dieser wird in der Switch-Funktion bestimmen, welche Funktion
    23. aus Funktionen.cpp aufgerufen wird */
    24. printf("\n\nGeben Sie den umzurechnenden Wert ein: \n");
    25. printf("Eingabe:\t");
    26. scanf("%f", &tempEin);
    27. switch(eingabe)
    28. {
    29. case 12: tempAus = FahrenheitToCelsius(tempEin); break;
    30. case 13: tempAus = FahrenheitToKelvin(tempEin); break;
    31. case 21: tempAus = CelsiusToFahrenheit(tempEin); break;
    32. case 23: tempAus = CelsiusToKelvin(tempEin); break;
    33. case 31: tempAus = KelvinToFahrenheit(tempEin); break;
    34. case 32: tempAus = KelvinToCelsius(tempEin); break;
    35. default: tempAus = -9999999999;
    36. }
    37. if(tempAus == -9999999999)
    38. printf("Ihre Eingabe war fehlerhaft. Bitte nur die angegebenen Werte nutzen.\n\n");
    39. else
    40. printf("\nDie umgerechnete Temperatur betraegt %.2f Grad.\n\n", tempAus);
    41. printf("Wollen Sie erneut starten?\n(Fuer Neustart bitte J oder j eingeben)\n\n");
    42. scanf("%c", &antwort);
    43. printf("\n\n");
    44. }while(antwort == 'J' || antwort == 'j');
    45. system("pause");
    46. return 0;
    47. }
    Alles anzeigen


    Wär sehr dankbar für den Fehlerfund :)
  • Oh ha, da sind scheinbar einige VS2010 Besonderheiten im Quelltext.

    Da ich so ein Teil nicht habe und deinen Quelltext nur teilweise kenne, versuche ich das mal so:
    Warum hast du teilweise C++ in deinem Quelltext und wählst für deine Ein- und Ausgaben C ?(

    Ursache für dein Problem: du gibst bei
    scanf("%c", &antwort);
    dein Zeichen + die Eingabetaste auf den "stdin" -> verarbeitest aber nur dein Zeichen und die Daten der Eingabetaste bleiben im "stdin"!
    Beim nächsten Aufruf von
    scanf("%c", &whatever);
    irritieren die nicht ausgelesenen Daten dein Programm.

    Wenn dein Quelltext nur auf VS laufen soll, schaue:
    msdn.microsoft.com/en-us/library/9yky46tz%28v=vs.71%29.aspx

    Wenn das Standard-C werden soll, schaue:

    Quellcode

    1. while(fgetc(stdin)!='\n');


    Für C++ :
    cplusplus.com/reference/iostream/istream/ignore/

    Suche dir die Version aus, die dir am meisten entgegen kommt.

    Schau dir das gut an! Ist eine der meistgestellten Fragen in C-Foren :D

    MfG bcc-fan