# C-Programmieren: Zahlen mit Leerzeichen einlesen und verarbeiten



## kingmar (16. März 2009)

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?


----------



## Enumerator (16. März 2009)

Abend!

Die einfachste Variante ist wohl die Funktion strtok aus <string.h>. 

Greetz
Enum


----------



## Jacal (16. März 2009)

Ich habe dir einmal ein Beispielprogramm geschrieben, ich hoffe, es ist ausreichend dokumentiert.


```
#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);
}
```


----------



## kingmar (16. März 2009)

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?


----------



## RedWing (17. März 2009)

Hallo,

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


```
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


----------

