Beim Programmstart sofort Werte übergeben und sortieren
-
wwwAndy schrieb:
Du ließt "groesse" Zahlen ein und gibst auch "groesse" zahlen wieder aus.
Deine datei hat aber nur 7 Einträge. Bei den weiteren würde dir scnaf einen Fehler zurückgeben (dann weißt du auch, wieviel wirklich drinstehehn)
aber du wertest den rückgabewert von scanf ja nicht aus:The return value of scanf() is the number of variables that were successfully assigned values, or EOF if there is an error.
Gruß Andy
Ja, weil ich vorher nie weiß, wie viele Zahlen in der Datei steht. Es können aber nicht mehr 20 Zahlen drin stehen, deshalb das Maximum 20.
-
ProgChild schrieb:
Dein Formatstring ist falsch... Versuch mal:
scanf("%d", &zahlen[i]);
das spielt keine Rolle ob ich %d oder %i benutze es kommt das gleiche Ergebnis
-
Peter T schrieb:
das spielt keine Rolle ob ich %d oder %i benutze es kommt das gleiche Ergebnis
Nicht ganz. Wenn deine Zahl mit einer 0 beginnt wird sie als Oktal gelesen. Wenn sie mit 0x anfängt, wird sie als Hexadezimal gelesen. Das ist ehr selten beabsichtigt.
-
#define GROESSE 20 int main( int argc, char *argv[] ) { int zahlen[GROESSE]; int i, s; for( i=0; i<GROESSE; i++ ) if (1 != scanf("%i\n", &zahlen[i])) break; for( s=0; s<i; s++ ) printf("%i\n", zahlen[s]); return 0; }
:xmas2:
-
OK Danke das auslesen funktioniert schon.
Hab noch ein Problem beim Start.
Ich hab eine Datei (sort.dat), die ich an das Programm, in Form programm.out < sort.dat übergebe.
Wenn ich aber nur programm.out schreibe. Stürzt das Programm ab.
Also brauche ich eine Fehlerabfrage.Überlegt habe ich das in so:
if( argc <= 1 ) { printf("Fehler!"); return -1; }
Leider klappt das nicht, wie kann ich es denn verhindern
-
Peter T schrieb:
Wenn ich aber nur programm.out schreibe. Stürzt das Programm ab.
das sollte nicht sein. das programm wartet dann darauf, dass du die zahlen von hand eingibst
:xmas2:
-
Eine Frage zum Quelltext habe ich noch.
if (1 != scanf("%i\n", &zahlen[i]))
warum heißt es hier ungleich 1???
-
Peter T schrieb:
warum heißt es hier ungleich 1???
wenn scanf keinen wert mehr (!=1) einlesen konnte, wird die schleife abgebrochen.
-
Eine Alternative wäre es, nicht über die Pipes zu gehen:
int main( int argc, char *argv[] ) { int zahlen[GROESSE]; int i, s; FILE* data; if(argc<2) { printf("Bitte Quelldatei angeben!\n"); exit(1); } data = fopen(argv[1],"r"); for( i=0; i<GROESSE; i++ ) if (1 != fscanf(data,"%i\n", &zahlen[i])) break; for( s=0; s<i; s++ ) printf("%i\n", zahlen[s]); return 0; }
(aufgerufen wird das dann per "programm.out sort.dat")
-
Danke, aber das sollte ich ja nicht machen.
Das hätte ich auch geschaft.Das Programm sollte schon mit programm.out < sort.dat aufgerufen werden.
Aber trotzdem danke