Frage zu Strings...
-
Hm, das ist immer eigentlich noch das gleiche Problem wie gestern Abend. Ich weiß nicht, wie ich in C eine Benutzereingabe programmiere, die dem Benutzer erlaubt ein int array mit int-Zahlen zu belegen; getrennt z.B. durch Leerzeichen. Folgende Eingabe soll es verdeutlichen:
Der Benutzer gibt genau das in die Konsole ein:
12 32 45 56 78 89 123 456 789 -> [ENTER]
Im Array soll dann folgendes stehen:
----------------------------------------------------------------------------- | 12|032| 32|032| 45|032| 56|032| 78|032| 89|032|123|032|456|032|789|032|010| -----------------------------------------------------------------------------
Irgendwie verstehe ich das aber trotzdem nicht. Denn wie soll man denn nun z.B. die ASCII-Zahl "32" für das Leerzeichen von der Zahl 32 die an der zweiten Stelle im Array steht unterscheiden können?
-
bandchef schrieb:
Hm, das ist immer eigentlich noch das gleiche Problem wie gestern Abend. Ich weiß nicht, wie ich in C eine Benutzereingabe programmiere, die dem Benutzer erlaubt ein int array mit int-Zahlen zu belegen; getrennt z.B. durch Leerzeichen. Folgende Eingabe soll es verdeutlichen:
Der Benutzer gibt genau das in die Konsole ein:
12 32 45 56 78 89 123 456 789 -> [ENTER]
Ich hab Dir doch gestern abend einen funktionierenden Quellcode dafür gepostet ...
-
Du meinst den hier?
i = 0; //getchar(); scanf("%i", &zahl); while(zahl != -1) { liste[i] = zahl; i = i + 1; scanf("%i", &zahl); }
-
Gut, das stimmt...
Die Abbruchbedingung der Schleife ist aber doch eine -1. Das heißt, damit ich aus der while-Schleife rauskomm, müsste der Benutzer eine -1 reinschreiben. Das ist aber doch auch nicht Sinn der Sache, oder?
-
Ich will mir in meinem Programm die Stelle im Array merken an der die kleinste Zahl gesessen hat.
Mein Code:
#include<stdio.h> #include<ctype.h> #include<string.h> #define NMAX 100 int main() { int zahl, liste[NMAX]; int i, j, k, t, kleinste_zahl, hilfs_var, zaehler; i = 0; scanf("%i", &zahl); while(zahl != -1) { liste[i] = zahl; i = i + 1; scanf("%i", &zahl); } kleinste_zahl = liste[0]; k = 1; zaehler = 0; for(j=k; j<i; j=j+1) //Suche der kleinsten Zahl { if(liste[j] < kleinste_zahl) { kleinste_zahl = liste[j]; zaehler = liste[j]; } } printf("kleinste Zahl = %i, Index-Stelle = %i\n\n", kleinste_zahl, zaehler); return 0; }
Ich weiß aber nicht wie ich das machen soll. Im zaehler soll sich das gemerkt werden. Kannst du mir helfen wie das gehen soll?
-
zaehler = j;
-
#include<stdio.h> #include<ctype.h> #include<string.h> #define NMAX 100 int main() { int zahl, liste[NMAX], sortiert[NMAX]; int i, j, k, kleinste_zahl, stelle; i = 0; scanf("%i", &zahl); while(zahl != -1) { liste[i] = zahl; i = i + 1; scanf("%i", &zahl); } kleinste_zahl = liste[0]; stelle = 0; for(j=1; j<i; j=j+1) //Suche der kleinsten Zahl { if(liste[j] < kleinste_zahl) { kleinste_zahl = liste[j]; stelle = j; } } printf("kleinste Zahl = %i, Index-Stelle der Zahl = %i", kleinste_zahl, j); return 0; }
Dieser Code liefert für die Zahlenfolge 5,7,9,8,1,4,3,2 zwar die 1 als kleinste Zahl aber die Stelle stimmt nicht. Er gibt mir als Indexstelle eine 8 aus. In Wirklichkeit ist es aber doch die 4... Ehrlich gesagt, hab ich das auch schon ausprobiert...
Oder hab ich dich falsch verstanden?
-
Dann schau mal, ob du in deiner Ausgabe die richtige Variable ausgibst
-
Ich hab jetzt meinen Code weiter vervollständigt. Jetzt gibts allerdings das Problem, dass bei der Zahlenreihenfolge 5,7,9,8,1,4,3,2 nach dem 5. Durchlauf die 5 in der "liste" zugleich auch die kleinste Zahl ist. Das bedeutet nun, dass er mir an die 6. Stelle wieder die 5 schreibt, obwohl da die 7 kommen würde. Ich weiß aber jetzt wieder nicht an was das liegt!
#include<stdio.h> #include<ctype.h> #include<string.h> #define NMAX 100 int main() { int zahl, liste[NMAX], hilfs_var; int i, j, k, len_liste, kleinste_zahl, stelle; i = 0; scanf("%i", &zahl); while(zahl != -1) { liste[i] = zahl; i = i + 1; scanf("%i", &zahl); } len_liste = i; stelle = 0; k = 0; do { kleinste_zahl = liste[k]; for(j=k; j<len_liste; j=j+1) //Suche der kleinsten Zahl { if(liste[j] < kleinste_zahl) { kleinste_zahl = liste[j]; stelle = j; } } hilfs_var = liste[k]; liste[k] = kleinste_zahl; liste[stelle] = hilfs_var; k = k + 1; }while(k != len_liste); for(i=0; i<len_liste; i=i+1) { printf("%i", liste[i]); } return 0; }
-
Sorry, nun bin ich drauf gekommen: es musste ein "kleiner-gleiche" in die if-Abfrage eingebaut werden!
Danke für eure Hilfe!