Frage

Ich habe einen Weg finden, das Maximum und Minium Zahl in einem Feld angezeigt wird, ist die Größe des Arrays 100 und nicht mehr als das und es ist nicht für die Eingabevalidierung benötigen. Das Programm wird für die Eingabe immer wieder gefragt, bis 0 angetroffen wird, und es wird zu dem Array hinzugefügt bekommen.

Ich habe alles herausgefunden, außer wie der Überblick zu behalten, welche der größte und kleinster Wert ist. Ich würde es begrüßen, wenn jemand meinen Code beheben oder zeigt me.Another Problem, das ich habe, ist die Schleife immer innerhalb der while-Schleife zu beenden und tut Berechnung max / min, wenn der Eingang gleich 0 ist.

/*
 ============================================================================
 Name        : test.c
 Author      :
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#define n  100
int main(void){


 int numbers[n];
 int i = 1;
 int j;
        int input;
 int maxvalue;
 int minvalue;

   printf("Enter the next array element>");

input = scanf("%d", &numbers[100]);



while (input != 0){

  numbers[i] = input;
  i++;
  printf("Enter the next array element, while loop>");
  input = scanf("%d", &numbers[n]);
  if (input == 0){
printf("Enter the next array element, if loop");
   numbers[i] = 0;

   for (j =2;j <= i; j++){
    minvalue = numbers[1];

    j++;
    if (numbers[j] > minvalue){
     maxvalue = numbers[j] ;
    }
    else{
     minvalue = numbers[j] ;
    }

   }


  }
 }


printf("%f\t", maxvalue);

printf("%f\n", minvalue); 
 }

EDIT: Ich habe alles aus Ihren Vorschlägen und bearbeiten meinen Code. Dies ist mein Code unten. Es ist jedoch die Ausgabe ist nicht, was ich erwarte.

#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void){


    int numbers[N];
    int i = 0;
    int j;
        int input;
    int maxvalue;
    int minvalue;

            printf("Enter the next array element>");

scanf("%d", &input);



while (input != 0){

        numbers[i] = input;
        i++;

        if (input == 0){
                   i++;
            numbers[i] = 0;
                        minvalue = numbers[0];
                        maxvalue = numbers[0];
                        for (j=0;j<=i-1;j++){

                            if (minvalue >= numbers[j]){
                                minvalue = numbers[j];
                            }else if (maxvalue <= numbers[j]){
                                maxvalue = numbers[j];
                            }


                        }

/* min = value of first array element
max = value of first array element

begin loop for each array element, index = 0 to (n-1)

--- if array element value is less than min, set min to this value
--- if array element value is more than max, set max to this value

increment index and repeat loop til last index is completed

average = sum / number of elements (n).
max and min will hold their correct values.*/




        }
                printf("Enter the next array element, while loop>");
    scanf("%d", &input);
    }


printf("%d\t", maxvalue);
printf("%d", minvalue);
    }

Dies ist der Ausgang, ich bin immer! Kann jemand das für mich lösen.

Enter the next array element>1
Enter the next array element, while loop>2
Enter the next array element, while loop>3
Enter the next array element, while loop>0
12190144 l6Press [Enter] to close the terminal

FINAL EDIT: Ich löste das alleine. Ich stellte die min / max Prüfung außerhalb des WHILE-Schleife-Master, dies die Eingabe von 0 erlaubt in der Anordnung eingegeben werden.

#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void){


    int numbers[N];
    int i = 0;
    int j;
        int input;
    int maxvalue =1;
    int minvalue = 1;
            printf("Enter the next array element>");

scanf("%d", &input);
minvalue = input;
maxvalue = input;



while (input != 0){
    numbers[i] = input;

    ++i;
                printf("Enter the next array element>");
    scanf("%d", &input);

if (input == 0){
numbers[i] = 0;
  ++i;

  }

}
for (j =0;j<i;j++){
 if (numbers[j] >= maxvalue){
                                maxvalue = numbers[j];
                            }
                            if(numbers[j] < minvalue){
                                minvalue = numbers[j];
                            }

}

printf("%d\t", maxvalue);
printf("%d\n", minvalue);

    }
War es hilfreich?

Lösung

Zunächst einmal sind Sie input auf den Rückgabewert von scanf() zuweisen. Dies ist die Anzahl der Elemente von dem Anruf zugeordnet ist, und da Sie die Eingabe sagen immer richtig sein wird, wird dieser Wert immer 1 sein.

Zweitens, Sie schreiben über das Ende des numbers[] Array mit der Zeile:

input = scanf("%d", &numbers[100]);

(Sie sollten scanf("%d, &input) stattdessen tun, und assign numbers[i] zur Eingabe in der Schleife.

Schließlich müssen Sie nicht neu zu berechnen maxvalue und minvalue durch jede Iteration der Schleife durch numbers[] laufen. Stattdessen einfach vergleichen sie mit input und ordnen sie entsprechend.

Hoffentlich bringen Sie auf dem richtigen Weg.

Andere Tipps

Es sieht aus wie Ihr zentrales Problem ist, dass Sie jede Zahl nur gegen minvalue vergleichen. Das ist in Ordnung für die Entscheidung, ob die aktuelle minvalue zu ersetzen, aber offensichtlich ist es nicht sagen Sie alles über das Verhältnis von jedem Element zu maxvalue.

Ein weiteres Problem: es macht Sinn minvalue von dem ersten Elemente zu initialisieren, aber nicht, wenn Sie es in der Schleife tun. Das nur verlieren alle Ihre vorherige Arbeit.

Sie müssen die gleiche Initialisierung mit maxvalue auch tun. Sie sollten diese Nummer auf den ersten Wert initialisiert werden.

Sie sollten auch eine Entscheidung über die min Berechnung und max, wie Sie die Daten oder in einem Durchlauf durch die Daten akkumulieren, wenn Sie fertig. Was Sie nicht tun wollen, ist jedoch, mit Schleife durch die vergangenen Elemente jeder neuen. Das gibt Ihr Programm quadratische Zeitkomplexität für keinen Nutzen.

Schließlich toleriert keine miese Formatierung. Debuggen immer beinhaltet den Code zu studieren und Sie wollen es immer perfekt formatiert wird sowohl über die Dinge professionell zu sein und auch zu erleichtern Ihre eigene Arbeit zu lesen.

Sie sind zwei Fragen, über die Strategie für die Min- / Max-Berechnung und für die Schleife. Tun Sie das nicht (an sich selbst), aber ein Problem auf einmal lösen. Also zuerst put so etwas wie

signed int input[] = { 8, -5 , /* some more values */ };
size_t const n = sizeof input/ sizeof input[0];

am Anfang und vergessen Sie Ihre scanf Probleme.

Dann wickeln Sie Ihre Min- / Max-Erkennung in der entsprechenden Schleifenanweisung.

Dann kompilieren Sie Ihren Code mit Warnungen auf. Z -Wall für gcc, aber dies könnte für Ihren Compiler variieren

Minen das sagt mir etwas:

Test-numbers.c: 21: Warnung: 'maxvalue' kann in diesem nicht initialisierte verwendet werden Funktionstest-numbers.c: 22: Warnung: ‚Minvalue‘ verwendet werden kann, nicht initialisierte in dieser Funktion

Das sagt Ihnen, dass Sie etwas sehr falsch in nicht unter Berücksichtigung der Ausgangspunkt Ihres Algorithmus gut tun.

Ich habe Ihren Code und ersetzt viele davon mit `/ * ... PLATZHALTER ... * /

reindented
#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void) {
    int numbers[N];
    int i = 0;
    int input;
    int maxvalue;
    int minvalue;

    printf("Enter the next array element>");
    scanf("%d", &input);

    while (input != 0) {
        numbers[i] = input;
        i++;

        if (input == 0) {
            /* ...PLACEHOLDER... */
        }
        printf("Enter the next array element, while loop>");
        scanf("%d", &input);
    }
    printf("%d\t", maxvalue);
    printf("%d", minvalue);
}

Hoffentlich können Sie sehen, was passiert, wenn Sie 1 eingeben, oder 2 oder 3, und wenn Sie 0 enetr.

. Hinweis: maxvalue und minvalue Werte werden nie geändert

Ein weiterer Hinweis: Wie oft hat die while() Linie ausführen


Bearbeiten mit Beispiel run

In diesem Beispiel läuft, ist der Code auf der linken Seite, was auf der linken Seite passiert, ist

        printf("Enter the next array element>"); |
        scanf("%d", &input);                     | Enter 42
                                                 |
        while (input != 0) {                     | input is 42, so you do the loop
            numbers[i] = input;                  | numbers[0] = 42
            i++;                                 | i = 1
                                                 |
            if (input == 0) {                    | input != 0; skip placeholder
                /* ...PLACEHOLDER... */          |
            }                                    |
            printf("Enter the next ...>");       |
            scanf("%d", &input);                 | enter 3
        }                                        | 
        while (input != 0) {                     | input is 3
            numbers[i] = input;                  | numbers[1] = 3
            i++;                                 | i = 2
                                                 |
            if (input == 0) {                    | input != 0; skip placeholder
                /* ...PLACEHOLDER... */          |
            }                                    |
            printf("Enter the next ...>");       |
            scanf("%d", &input);                 | enter 0
        }                                        | 
        while (input != 0) {                     | input is 0, skip while body
            /* ...PLACEHOLDER... */              |
        }                                        |
        printf("%d\t", maxvalue);                | maxvalue hasn't been initialized
        printf("%d", minvalue);                  | minvalue hasn't been changed
int cmp(const void *a,const void *b)
{
  return *(const int*)a-*(const int*)b;
}
...
qsort( numbers, 100, sizeof(numbers[0]), cmp );
printf("\nmin: %d\nmax: %d",numbers[0],numbers[99]);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top