C-Programmieren: Zahlen mit Leerzeichen einlesen und verarbeiten

kingmar

Grünschnabel
Hey Leute
Ich habe folgendes Problem. Ich will über die Konsole beliebig viele Zahlen einlesen und die jeweiligen Zahlen durch ein Leerzeichen voneinander trennen zum Beenden der Eingabe soll die 0 dienen.

z.B.

65 2 45 12 7 2 3 9 48 0

Wir haben es hier somit mit 9 Zahlen zutun, da die 0 nicht mehr dazugehört. Aus diesen Zahlen, die auch genauso eingegeben wurde soll nun die Summe gebildet werden und die größte und die kleinste Zahl ausgegeben werden.

Mein Problem ist hierbei, wie ich das mit dem Leerzeichen als Trennschritt machen, bzw. die eingegebenen Zahlen benutzen kann...?

Weiß jemand einen Rat?
 
Ich habe dir einmal ein Beispielprogramm geschrieben, ich hoffe, es ist ausreichend dokumentiert.

C++:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
	// Variablen initialisieren
	int bigNum, lessNum, summe, input;

	// Datei "dat.txt" öffnen
	ifstream dat ("dat.txt");

	// Erse Zahl einlesen
	if 	( dat >> input )	{
		// Variablen initialisieren
		bigNum 	= input;
		lessNum = input;
		summe	= input;
	}

	// Schleife, um Datei bis zum Ende zu lesen
	while (true)	{
		// Zahl einlesen, wenn Fehler beim Lesen oder Zahl = 0 abbrechen
		if 	( !(dat >> input) || ( input == 0 ) )
			break;
		else	{
			// bigNum & lessNum aktualisieren
			if (input > bigNum)
				bigNum = input;
			if (input < lessNum)
				lessNum = input;

			// Addieren
			summe += input;
		}
	}

	// Datei wieder schließen
	dat.close ();

	// Ausgabe
	cout 	<< "Summe:\t\t" 	<< summe 	<< "\n"
			<< "bigNum:\t\t" 	<< bigNum 	<< "\n"
			<< "lessNum:\t"     << lessNum  << "\n";

	return (0);
}
 
Ja das ist doch schonmal sehr schön...Besten Dank!

Aber ich hab leider noch nicht mit C++ gearbeitet. Und würde es gern in C schreiben...

Wie wandel ich z.B.

if ( dat >> input ) oder if ( !(dat >> input) || ( input == 0 ) ) um, dass es C-Konform ist!

Ich möchte nun selber einen String eingeben und die letzte Zahl soll die 0 sein um zu signalisieren, dass keine Zahl mehr kommt, also um aus der Eingabe zu springen!... Ohne aus einer Datei zu lesen... Wie realisiere ich das?
 
Hallo,

dafür kann man wie mein Vorredner bereits erwähnte strtok verwenden oder gleich scanf:

C:
    int number, ret_val;
  while ((ret_val = scanf("%d", &number)) != EOF) {
    if (ret_val == 0) {
      /* handle number matching failure */
    } else {
      /* handle valid input */
    }
    if (number == 0) {
     /* we have reached the end of the number sequence */
    }
  }

Gruß,
RedWing
 
Zurück