Array, und Zahlen aus Dateien



  • Klar, wenn du nur von Tastatur einlesen willst, reicht getchar(). Ansonsten benötigst du eine FILE*-Eingaberoutine (welche sind denn erlaubt?):

    while(!feof(file))
    {
      char c=fgetc(file);
      if(!isdigit(c) break;
      //arbeite mit c (bzw. c-'0')
    ]
    


  • also fgetc und fscanf sind erlaubt.



  • Zeichen lesen geht mit beiden Möglichkeiten:

    //a: fgetc():
    int res=fgetc(file);
    if(res==EOF) break;//End Of File
    char ch=res;
    
    //b: fscanf():
    char ch;
    int res=fscanf(file,"%c",&ch);
    if(res==EOF) break;
    

    (die if(res==EOF)-Abfrage dient jeweils zur Kontrolle, ob das Dateiende erreicht wurde)

    Zum Überprüfen auf Ziffer gibt es erstens die Funktion isdigit() (sofern erlaubt) und zweitens die Per-Hand-Abfrage "if(ch>='0'&&ch<='9')...".



  • Kann ich das denn so verpacken ?

    while((res = fgetc(FILE)) != EOF)
    {
       if(res >='0' && res <='9')
       {
          ...
       }
    
    }
    


  • ja, kannst du - eventuell würde ich noch ein "else break;" reinpacken - sonst erkennst du z.B. "123A17" al 12317.



  • Habe das nun so, funktioniert aber noch nicht. Das Programm stürzt dabei ab.

    #include <stdio.h>
    
    int main()
    {
    	FILE *fp;
    	int zf[100];
    	char fname[20], c, i = 0;
    	printf("\nDateiname eingeben: ");
    	while((c = getchar()) != '\n')
    		fname[i++] = c;
    	fname[i] = '\0';
    	i = 0;
    	fp = fopen(fname, "r");
    	if (fp != NULL)
    	{
    		while ((c = fgetc(fp)) != EOF)
    		{
    			if (c >= '0' && c <= '9')
    			{
    				zf[i++] = (int)c;
    			}
    			else
    				printf("\nBuchstabe %s erkannt!", c);
    		}
    	}
    	else
    		printf("\nDatei konnte nicht gefunden werden");
    
    	return 0;
    }
    


  • Du solltest c als int deklarieren, sonst klappt der Vergleich auf EOF nicht richtig (EOF ist ein spezieller Rückgabewert außerhalb des Zahlenbereiches für char's, deshalb liefert fgetc() auch int zurück).



  • ok, hab ich, jedoch stürzt das Programm ab, sobald er in der Datei über einen Buchstaben stolpert. Hab den Fehler gerade gefunden, jedoch gibt er mir den Buchtaben dann als Zahl aus wenn ich beim letzten else Zweig %s in %i ändere.



  • Jetzt soll ich die Werte allerdings in float einlesen. Das funktioniert bei mir irgendwie nicht



  • Wenn du das wirklich zeichenweise auslesen sollst, wünsche ich dir viel Spaß beim Zusammenbau des Wertes. Aber du kannst auch direkt in einen float einlesen:

    float data;
    fscanf(file,"%f",&data);
    

    PS: Schau dir mal die Dokumentation zu man: fscanf an - dort gibt es auch eine Liste, welche Format-Spzifikationen unterstützt werden (und was sie bewirken).


Anmelden zum Antworten