C - cmd - txt-Datei als Eingabe in ein Programm umleiten
- 
					
					
					
					
 Hallo, ich habe eine Programm geschrieben array.c bzw. dazu habe ich dann die array.exe 
 Das Programm liest mit scanf wert einwenn ich in cmd nun ( im Verzeichnis bei der Dateien ) array.exe<datei.txt mache liest er immer nur den erste Wert ein die txt-Datei sieht ungefähr so aus -18 
 93
 27
 -86
 22
 28
 -43
 96
 24
 88
 95
 -10er speichert aber nur die -18 im Array ein mein Programmcode #include <stdio.h> unsigned short getArray ( char A [ ] , short ) ; int main ( void ) { auto char A [ 143 ] ; unsigned short us = getArray ( A , ( sizeof ( A ) - 1 ) / sizeof ( * A ) ) ; printf ( "\n" ) ; auto unsigned short s ; for ( s = 0 ; s < ( sizeof ( A ) - 1 ) / sizeof ( * A ) ; s ++) printf ( "[%03u] %3d\t" , s , A [ s ] ) ; return 0 ; } unsigned short getArray ( char A [ ] , short anzahl ) { auto unsigned short us , us2 , us3 = 0 ; for ( us = 0 ; us < anzahl ; us ++ ) { fflush ( stdin ) ; scanf ( "%d" , A + us ) ; us3 ++ ; if ( us > 1 && A [ us ] == 0 && A [ us - 1 ] == 0 && A [ us - 2 ] == 0 ) { for ( us2 = us ; us2 > us - 3 ; us2 -- ) A [ us2 ] = 0 ; us3 -= 3 ; break ; } } return us3 ; }*Anm: Da wir ein Textdatei mit Zahlen bekommen haben bin ich mir unsicher was zutun ist gerade lese ich - da ich weiß dass es sich um Zahlen handelt - die EIngaben als Zahlen ein wie man im Code sieht mit scanf ( "%d" , A + us ) ;und gebe mir den inhalt dann auch als Zahlen aus mit printf ( "[%03u] %3d\t" , s , A [ s ] ) ;man könnte naürlich auch die Zahlen als Zahlen einlesen 
 und dann mit %c ausgebenfalls die Zeichen als Zahlen codiert sind. Da muss ich aber nochmal nachfragen was da genau gewollt wurde Was jedenfalls nicht funktioniert ist scanf ( "%c" , A + us ) ;man kann damit keine zweistelligen Zahlen einlesen glaube ich 
 Vielen Dank,James 
 
- 
					
					
					
					
 @JamesNguyen sagte in C - cmd - txt-Datei als Eingabe in ein Programm umleiten: auto char A [ 143 ] ; Warum benutzt du auto? unsigned short us = getArray ( A , ( sizeof ( A ) - 1 ) / sizeof ( * A ) ) Wo kommt die -1 her? fflush ( stdin ) ; Frag dich einmal selbst, was diese Zeile tut, wenn du stdin umgeleitet hast. Abgesehen davon, dass dies eigentlich undefiniertes Verhalten ist. Siehe https://en.cppreference.com/w/c/io/fflush 
 
- 
					
					
					
					
 - 
das auto kann man glaube ich auch weglassen, dass ist ja nur glaube ich dafür dass man sagt das landet auf dem stack 
- 
ich hatte mir das so gedacht da immer betont wurde der letzte platz in einem char Array muss für die \0 für die Terminierung 
 sein
 wir sollten ein Array zum einlesen von bis zu 142 zeichen erstellen mein array hat also deshalb 143 größe ich lese aber nur bis sizeof = 142 wert ein - aha ok, ich kenne mich damit nicht so gut aus aber ich glaube es gibt stdin, stderr und stdout
 für die Standardeingabe, Standardfehlerausgabe, Standardausgabe
 Ich kann das natürlich ausprobieren aber kannst du erklären warum hier welches richtig ist? das fflush bleibt aber denke ich das brauche ich ja um den eingabepuffer zu lösschen. 
 
- 
- 
					
					
					
					
 aber eig verstehe ich es nicht das programm schreibe ich ja unabhängig von der umleitung einer datei zur Eingabe und für nutzereingaben ist fflush stdin 
 und dannscanf eig schon richtig.. 
 
- 
					
					
					
					
 ok mit stderr und stdout kommt jetzt das richtige raus. bei beiden das gleiche 
 
- 
					
					
					
					
 also was macht es für einen unterschied ob die EIngabe von mir auf der Tastatur kommt oder aus einer Datei wieso braucht man letzterem jetzt eine Standard Ausgabe? tut mir leid habe deinen link übersehen schau mal rein 
 
- 
					
					
					
					
 @wob sagte in C - cmd - txt-Datei als Eingabe in ein Programm umleiten: fflush ( stdin ) ; ok heißt das fflush ( stdin ) ; ist allgemein falsch und undefiniertes Verhalten? Ich glaube in der Vorlesung hat er uns bei Nutzereingaben das genau so beigebracht 
 
- 
					
					
					
					
 Aber erstmal danke für die Hilfe ich kann jetztz weiter arbeiten 
 
- 
					
					
					
					
 @JamesNguyen sagte in C - cmd - txt-Datei als Eingabe in ein Programm umleiten: @wob sagte in C - cmd - txt-Datei als Eingabe in ein Programm umleiten: 
 ok heißt dasfflush ( stdin ) ; ist allgemein falsch und undefiniertes Verhalten? Richtig, siehe hier: https://en.cppreference.com/w/c/io/fflush Ich glaube in der Vorlesung hat er uns bei Nutzereingaben das genau so beigebracht Das ist schlecht. Siehe hier: https://docs.microsoft.com/en-us/previous-versions/9yky46tz(v=vs.140), Zitat: " // fflush on input stream is an extension to the C standard" - d.h. das geht nur mit Visual Studio. Und in neueren Versionen finde ich diesen Hinweis gerade nicht mehr. Zu deiner ersten Frage: war vorhin am Handy und hatte angenommen, dass dein getArray ein Array von ints füllt. Du hast ja ein char-Array. Aber jetzt bin ich völlig verwirrt von deinem Code. Was soll dein getArray überhaupt machen?! Und dann noch die verschachtelten Schleifen darin? Ich bin komplett raus und habe keine Idee, was eigentlich dein Ziel ist. scanf("%d", &adr)liest einen int ein, nicht einen char.Das "-1 für \0 als letztes Zeichen" gilt (nur) für Strings. 
 
- 
					
					
					
					
 @JamesNguyen C kennt keine Tastatur - es sieht nur den Datenstrom der rein kommt. Willst du jetzt Zahlen lesen (und damit rechnen) oder Zeichen? Wenn du Zahlen möchtest (bietet sich bei der .txt an) sollte man ein int-Array nehmen.
 Bei Zeichen gibt es Besseres (und schnelleres) alsscanf("%c",