Wo ist der Fehler im Programm?



  • HILFE!! schrieb:

    Warum wird "v******" zensiert?

    Wenn man's richtig schreibt, wird's auch nicht zensiert.

    Was dein Problem angeht: Siehe meine Signatur.



  • mittel=summe/i;
    

    ist im prinzip kein fehler. aber es ist nicht das, was du beabsichtigst.

    wenn du jetzt freundlicherweise noch kurz erwähnen könntest, WAS nicht funktioniert, könnte man dir auch sagen, WO der fehler liegt.



  • Die Bedingung für die Schleife scheint net zu greifen, da ich Zeichen eingeben kann bis ich schwarz werde.



  • #include <stdio.h>
    #include <stdlib.h>
    
    int main( void )
    {
      int iInp = 0;
      int iMax = 0;
      int iMin = 0;
      int iSum = 0;
      float fMid = 0;
      int iCnt = 0;
      char cBuf[256];  
      while ( ( iInp = atoi( gets( cBuf ) ) ) >= 0 )
      {
        if ( iInp > iMax )
          iMax = iInp;
        else if ( iInp < iMin )
          iMin = iInp;
        iSum += iInp;
        iCnt++;
      };
      fMid = (float)iSum /(float)iCnt;
      ...
      ...
      return 0;
    };
    

    In deinem Code verwendest du

    while((ch = getchar())!= '-')
    

    Damit verwendest du den ASCII-Wert der Zeichen und nicht die eigendlichen Ziffer-Zeichen.



  • Das ist doch im Prinzip egal, da das doch nur eine Abbruchbedingung ist, oder nicht? Ich hab das aus einem Buch, aber die benutzen das mit ...!=EOF bzw
    ...!='\n'



  • Danke übrigens für deinen Code Herrmann, aber ich programmiere in C erst seit 3 Stunden und das sieht für mich NOCH aus wie ein russischer Zeitungsartikel! 😉 Nix für ungut!



  • #include <stdio.h>
    
    int main()
    {
    int ch=0,zahl=0,min=0,max=0,summe=0,i=1;
    float mittel;
    printf("Bitte positive ganze Zahlen eingeben:\n");
    scanf("%d",&zahl);
    while(zahl>=0)
              {
              if (zahl<=min)
                 {min=zahl;}
              if (zahl>=max)
                 {max=zahl;}
              summe+=zahl;
              i++
              scanf("%d",&zahl);
              }
    
    mittel=summe/i;
    printf("Minimum: %d \nMaximum: %d \nSumme: %d \nMittelwert: %f \n",min,max,summe,mittel);
    
    system("PAUSE");
    return (0);
    }
    

    du musst prüfen, ob zahl>=0 bleibt. du liest immer ein zeichen ein, dann ne zahl, usw. wie oben sollte es besser gehen 😉



  • getchar() liest die eingabe nicht ein, bis der zeilenschalter ('\n') gedrückt wird!
    deine schleife muss also so irgendwie aussehen:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
      int numbers[10] = {0};
      char ch[4] = {0};
      char *temp = ch;
      int i;
    
      for(i=0;ch[0]!='-';i++)
      {
        while((*temp = getchar()) != '\n')
          temp++;
        temp = ch;
        numbers[i] = atoi(ch);
        printf("output: %d\n", numbers[i]);
      }
      return 0;
    }
    

    das liest dir alle zahlen (max. 10) in ein array ein, solange du eine negative zahl eingibst (diese zahl wird auch gespeichert). deine min/max/summen berechnungen kannst du dann mit dem array machen.

    Sebastian



  • naja, so kannst du maximal 3-ziffrige zahlen einlesen, und das fängst du nicht ab. N array is ja gar nicht nötig, um maximum, minimum und durchschnitt zu berechnen.

    EDIT: und dein programm bricht natürlich ab, SOBALD man negative zahlen eingibt ;).



  • du hast recht, es ist ein nachteil, dass man die größe des arrays immer anpassen muss... wollte eigentlich auch nur zeigen, wie man das mit getchar() machen kann (und warum das beim OP nicht funktionieren konnte).
    und ja, mein programm bricht ab, sobald man eine negative zahl eingibt, gespeichert wird sie allerdeings trotzdem!

    Sebastian


Anmelden zum Antworten