alte Werte gelöscht (Anfänger Problem)



  • ich hab jetzt mal angefangen C zu lernen, bisher hab ich immer C++ benutzt,
    aber ich find grade nen Fehler einfach nicht.

    Am Ende wenn in der main Funktion die eingelesenen Werte ausgegeben werden
    sind die Werte von a und b immer "gelöscht" also 0

    ich hab auch mittendrin schonmal printf eingesetzt
    die flushscanf und check funktion funktionieren, aber sobald ich zum 2. mal
    check(flushscanf()) aufrufe, ist die Variable die ich beim vorigen Aufruf übergeben hab wieder 0

    also hier ist am Ende a = 0, b = 0, aber c = der eingegebene Wert

    #include <stdio.h>
    
    int flushscanf(char *tmp)
    {
      int check = 1;
      while(1)
      {
        if(scanf("%d", tmp))check = 0;
        getchar();
        return check;
      }
    }
    
    void check(int tmp)
    {
      if(tmp)
      {
        printf("fehlerhafte Eingabe\n");
      }
    }
    
    int main(void)
    {
      char a;
      char b;
      char c;
      printf("1. Zahl: ");
      check(flushscanf(&a));
      printf("2. Zahl: ");
      check(flushscanf(&b));
      printf("3. Zahl: ");
      check(flushscanf(&c));
      printf("a:%d\nb:%d\nc:%d", a, b, c);
      return 0;
    }
    


  • scanf("%d",tmp);
    

    ist nicht richtig - damit schreibst du einen int-Wert in ein char-Element (und überschreibst damit ziemlich sicher die benachbarten Speicherstellen, auf denen deine anderen Variablen liegen - um char's einzulesen, verwendet man

    scanf("%c",tmp);
    

    und wenn du die char wirklich als 8-Bit-Zahl nutzen willst, benötigst du eineZwischenvariable, die scanf genug Platz bietet:

    int t;
    scanf("%d",&t);
    *tmp=t;
    


  • ah, danke, jetzt versteh ich das Problem



  • while(1)
      {
        if(scanf("%d", tmp))check = 0;
        getchar();
        return check;
      }
    

    Wieso baust du da ne Endlosschleife herum? die wird doch so oder so nur einmal ausgeführt oder?


Anmelden zum Antworten