C Werte einlesen bis Tastenkombination EOF

Hallo Habo,
vielleicht hat der ein oder andere im IRC schon mitbekommen, dass ich eine Funktion schreiben muss, die Werte bis zur Tastenkombination für EOF einlesen muss.
(Ich dachte zu erst, bis 'EOF' eingeben wird , danke noch mal tcr für die Hilfe.)

Die Tastenkombination für EOF auf einem Linuxsystem ist ja Strg+D

jetzt habe ich folgenden Ansatz :
Code:
int einlesen(char werte[], int *anz_werte)
{
/*Einlesen der Werte
bis die Tastenkombination für EOF (strg+D) gedrückt wurde*/
int i=0;
while(!EOF)
  {
  if(i==20)
  {
  printf("Maximal 20 Werte!");
  return 0;
  }
  scanf("%i", &werte[i]);
  i++;
  }
}

Maximal halt 20 Werte einlesen oder bis die Tastenkombination für EOF gedrückt wird.
Irgendwie wird die Schleife nur noch nicht ausgeführt?
Habe ich irgendwas vergessen oder wie muss ich das Problem lösen?

LG,weau
 
Du könntest einfach ein Stückchen Code, dass ich hier mal gepostet habe so umschreiben, dass es max. 20 mal läuft und statt '\n' ein EOF als Abbruchbedingung hat. Ich hoffe das hilft etwas.

/edit:

Sollte ANSI-C gefordert sein, dann sind putch() und getch() natürlich nicht möglich, aber mit ein bisschen googlen findest du einen Workaround um diese auch ANSI-C kompatibel zu machen.
 
Du solltest denn Wert in der Bedingung von der while Schleife
while(!EOF)
einfach mit dem eingelesenen Zeichen vergleichen.

Code:
int einlesen(char werte[], int *anz_werte)
{
int i= 0;
char c;
while((c = getchar()) != EOF && i < (*anz_werte))
  werte[i++] = c;
  return i;

  /* du könntest hier noch ein Nullbyte einfügen,/
   * ehm, das newline zeichen wird mitgeparst*/

}


int main(int argc, char **argv){
   char array[20];
   int size = sizeof(array);
   einlesen(array, &size);
   return 0;

}

Weis nicht ob du denn String ausgeben willst wenn ja füge zur function noch
werte = '\0' hinzu

mfg prEs
 
Danke für eure Antworten!
Ich habe meinen Quellcode jetzt ein bisschen angepasst, allerdings noch mit einer Endlosschleife zu kämpfen.
Kann irgendwie nicht erkennen, warum hier keine Abbruchbedingung erfüllt ist.

Code:
int einlesen(char werte[], int *anz_werte)
{
/*Einlesen der Werte
bis die Tastenkombination für EOF (strg+D) gedrückt wurde*/
int i=0;
char c;
while((c = getchar()) != EOF)
werte[i++] = c;
*anz_werte = i;
	if(i==20)
	{
		return 0;
	}
}

Ich möchte überigens nur positive und negative Zahlen einlesen, dann kann ich mein Array ja auch gut als integer deklarieren oder?
Muss es dann auch

int c;
c = getint() heissen?


LG, weau

Edit :

Ich habe meinen Code noch einmal was angepasst :

Code:
int einlesen(char werte[], int *anz_werte)
{
/*Einlesen der Werte
bis die Tastenkombination für EOF (strg+D) gedrückt wurde*/
int i=0;
char c;
	while((c = getchar()) != EOF)
	{
		if(i==20)
		{
			printf("MAX ueberschritten, alles kaputt!!-.-");
			/*return 0;*/
			ausgabe(werte,anz_werte);
		}
		werte[i++]=c;
	}
}

Problem : Bei i = 10 Wird abgebrochen
Strg + D funktioniert gar nicht
und es werden irgendwie nur blödsinnige Zahlen ausgegeben.
 
also wenn du 123 eingibst sind das 3 zeichen
eine 1 eine 2 eine 3 und die werden im Char-Buffer mit dem wert 0x31-0x33 dargestellt, also wahrscheinlich nicht ganz das was du wolltest,
zum ausgeben wär dass Nullbyte ganz nett ; / , sprich:
Code:
if(i==20)
{
	printf("MAX ueberschritten, alles kaputt!!-.-");
	/*return 0;*/
       werte[19] = '\0';
	ausgabe(werte,anz_werte);
}
.
Wenn du immer nur einen Charakter eingibst wird das newline zeichen mitgeparst.

also bei einer Eingabe wie:

a <enter>
b <enter>
c <enter>

sieht das ganze dann im buffer so aus:
0 1 2 3 4 5
'a' '\n' 'b' '\n' 'c' '\n'

deshalb wird nach 10 abgebrochen.

Im falle von ganzzahlen kannst du einfach scanf() verwenden.
Oder atoi() , damit wandelst du einen STRING in einen Integer um.
 
Ich möchte Werte im negativen Bereich und positiven Bereich einlesen
d.h. ich benötige erst mal nur ein int Array ( habe ich geändert )
Die Zahlen kann ich auch mit Scanf einlesen nur wie gesagt klappt die Tastenkombination für EOF nicht.
Aktuell hier mein Quellcode :

Code:
int einlesen(int werte[], int *anz_werte)
{
/*Einlesen der Werte
bis die Tastenkombination für EOF (strg+D) gedrückt wurde*/
int i=0;
char c;
while((c = getchar()) != EOF)
scanf("%i", &werte[i]);
*anz_werte = i;
	if(i==20)
	{
		return 0;
	}
i++;
}

Ich möchte also Zahlen einlesen und in ein Array speichern (Ganzezahlen) .
 
Dies hier sollte laufen.
Hab's allerdings nicht getestet.
....
char* pointer = calloc(128,sizeof(char));
char* backup = pointer;
char character = getchar();
int i = 0;
while( character != EOF)
{
character = getchar();
*(pointer++) = character;
i++;
}
*(pointer) = '\0';
printf("%s",backup);
free(pointer);
...

mfg

sw33t
 
Zurück
Oben