Fehlermeldung in C

So funktioniert die Schleife beispielsweise:

C++:
while(fgets(inputLine,sizeof(inputLine),Input))
{
    while (j < sizeof (inputLine))
    {
        if (inputLine[j] == '\n')   // Suchen, ob ein Zeichen ein \n ist
        {
            anzahl++;
            j = 0;
            break;
        }

        j++;
    }
}
Dieser Code ist fehleranfällig, da es durchaus vorkommen kann, dass fgets weniger als sizeof(inputLine) Zeichen einliest. sheel hat ja schon gezeigt, wie man es besser macht.

Grüße,
Matthias
 
wenn es vorkommt das fgets weniger als sizeof(inputLine) Zeichen einliest oder es in einer Zeile sogar mehr Zeichen gibt, dann ist ein Fehler im Koordinatenpaar vorhanden. Könnte man das abfangen und auch ausgeben lassen, in welcher Zeile der Fehler liegt?
mfg
 
Was genau ist an meinem geposteten Code falsch?
Du gehst immer sämtliche Zeichen des char-Arrays durch, auch wenn weniger Zeichen eingelesen wurden. Angenommen die Eingabedatei besteht aus nur einer Zeile mit 10 Zeichen ohne \n am Ende, dann hängt der Endwert von anzahl davon ab, was im (uninitialisierten!) Bereich jenseits der 10 Zeichen des char-Arrays steht.

Grüße,
Matthias
 
Komplett ausgebessert:
C++:
int Anzahl_Zeilen() {
	FILE *input;
	char inputLine[23];
	int anzahl = 1;
	
	input = fopen( "Geodaten.txt", "r" );
	
	if (input != NULL)	{
	
		while(fgets(inputLine, sizeof(inputLine), input))	{
			if(strlen(inputLine) > 0 && inputLine[strlen(inputLine) - 1] == '\n')
				anzahl++;
			
		}
		printf("Anzahl: %d", anzahl);
		fclose(input);
	}
	
}


Die Funktion strlen ermittelt doch die Länge einer Zeichenkette oder?
Aber eigentlich soll dieses Programm nur die Zeilen der Datei zählen und meckern, wenn eine zeile länger ist als inputLine[23].
 
Ja, strlen ermittelt die Länge.
Hier verwende ich es nur, um herauszufinden, welches das letzte Zeichen ist.

Und wenn sich das Programm bei zu langen Zeilen beschweren soll:
C++:
int Anzahl_Zeilen()
{
    FILE *input;
    char inputLine[23];
    int anzahl = 1,i;
    
    input = fopen( "Geodaten.txt", "r" );
    
    if (input != NULL)
    {
    
         while(fgets(inputLine, sizeof(inputLine), input))
         {
             i = strlen(inputLine);
             if(i > 0 && inputLine[i - 1] == '\n')
                 anzahl++;
             else
                printf("Zeile %d zu lang\n", anzahl);
            
         }
         printf("Anzahl: %d", anzahl);
         fclose(input);
    }
}
Sowas in der Art.
Das mit der Variable i deshalb, damit strlen
nicht dreimal für den gleichen String aufgerufen wird.

Bei dem Code kann es passieren, dass die Zu-lang-Meldung
mehrmals für die gleiche Zeile ausgegeben wird. Aber soll ja nur ein Beispiel sein.
 
Zurück