Inkrementell aufrechnen



  • Hallo zusammen,

    habe folgendes Problem. Ich lese eine Text-Datei ein, die beispielhaft wie folgt aussieht:

    A=100
    A=TG(3)
    A=TG(2.3)
    A=200
    A=TG(-.2)
    A=10
    A=TG(-0.4)
    

    Die Werte die jetzt in den Klammer hinter TG stehen, sollen zu dem vorherigen Wert inkrementell adddiert oder subtrahiert werden werden. Diese sind auch nicht zwingend ganzzahlig oder mathematisch positiv. So soll theoretisch die Ausgabe aussehen:

    A=100
    A=103
    A=105.3
    A=200
    A=199.8
    A=10
    A=9.6
    
    if (( z = strchr( Zeile, '(' )) != NULL )   // Beginn
            {                                           // Zeile A=TG(4)
                                                        // A=(4)
    		 if (( strstr( Zeile, "A=TG" )) != NULL )
    		 {
                while ( Replace( z, " ", "" ));         // A=(4)   // Kommas entfernen
    
                n = MZ[1].Koord[A];                     // In dieser Variable wird der letzte A-Wert gespeichert
    
    			strcopy(A , "%d" ,  )    // ??
    			atoi              // ??
    

    Ich drehe mich aber seit gestern im Kreis, da es mir einfach zu viele Befehle gibt und Varianten in der Aufgabenstellung gibt. Auch diverse Bücher helfen mir da nicht, da hier immer nur die Grundlagen mit einem einfachen Beispiel erklärt werden. Zusammenhängende Nutzung von string.h Befehlen gibt es scheinbar in keinem Buch. 😕

    Kann mir jemand einen Tipp geben, wie ich am einfachsten an den Wert innerhalb der Klammer kommen, um mit diesem zu Rechnen ?!

    Danke !



  • Schau dir mal sscanf an.

    Du darfst sscanf auch mehrmals auf den selben Text anwenden.



  • #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    	FILE *fp;
    	float sum = 0;
    
    	if ((fp = fopen("input.txt", "r")) == NULL)
    	{
    		fprintf(stderr, "could not open file\n");
    
    		return 1;
    	}
    
    	while (!feof(fp))
    	{
    		char buf[1024];
    		char cmd[64];
    		char ch = 0;
    		float temp = 0;
    
    		if (!fgets(buf, sizeof(buf) - 1, fp))
    		{
    			fprintf(stderr, "invalid format\n");
    
    			break;
    		}
    
    		if (sscanf(buf, "%c=%s[^\n]", &ch, cmd) != 2)
    		{
    			fprintf(stderr, "invalid format\n");
    
    			break;
    		}
    
    		if (sscanf(cmd, "%f", &temp) == 1)
    		{
    			printf("%c=%.1f\n", ch, temp);
    
    			sum = temp;
    		}
    		else if (sscanf(cmd, "TG(%f)", &temp) == 1)
    		{
    			sum += temp;
    
    			printf("%c=%.1f\n", ch, sum);
    		}
    		else
    		{
    			fprintf(stderr, "invalid format\n");
    
    			break;
    		}
    	}
    
    	fclose(fp);
    
    	return 0;
    }
    

Anmelden zum Antworten