Fehlermeldung in C

stoepsel555

Grünschnabel
Moin moin,

in meinem Programmabschnitt möchte ich eine Textdatei öffnen, welche pro Zeile 2 Koordinatenwerte beinhaltet. Nun möchte ich gerne, dass das Programm ausliest, wieviele Zeilen meine Textdatei hat.

Die Fehlermeldung lautet: Warning comparison between pointer and integer.

Leider konnte ich bisher den Fehler nicht finden. Vielleicht kann mir jemand helfen****?
C++:
int Anzahl_Zeilen() {
	FILE *Input;
	char inputLine[23];
	char ptr;
	int i=1, anzahl;
	
	Input = fopen( "Geodaten.txt", "r" );
	
	if (Input!=NULL)	{
	
		while(fgets(inputLine,sizeof(inputLine),Input))	{
			if(fgets(inputLine,sizeof(inputLine),Input) == '\n')	{
				anzahl=i;
				i++;
			}
			else{
				printf("Fehler in der Textdatei!");
				break;
			}
			
		}
		printf("Anzahl: %i",anzahl);	
	}
	
}

mfg
 
Zuletzt bearbeitet von einem Moderator:
Bitte Code-Tags benutzen!
Und eventuell noch dazuschreiben in welcher Zeile der Fehler aufgetreten ist.

Dein Problem ist die Zeile
C++:
if(fgets(inputLine,sizeof(inputLine),Input) == '\n')

fgets() gibt den Zeiger zurück, den du übergeben hast (inputLine) mit den übertragenen Daten. Du willst diesen Zeiger mit einem Zeichen ('\n') vergleichen, das funktioniert natürlich nicht. Du kannst kein Zeichen mit einem Zeiger vergleichen.

Lg
 
Hi und Willkommen bei tutorials.de,

zum Forum: Bitte Codetags verwenden (siehst du in deinem Beitrag).

Hier ist es zwar schon klar, aber oft hilft die Zeile,
in der die Warnung/der Fehler aufgetreten ist.

Seine Art der Groß-/Kleinschreibung bei Variablennamen etc. sollte man einhalten.
(Input ist die einzige Großgeschriebene Variable).
Verbessert die Verständlichkeit/Übersichtlichkeit.

Ein fclose fehlt.
ptr wird nirgends gebraucht.
Beim printf statt %i eher %d nehmen.

Warum zählst du in der Schleife nicht gleich mit anzahl,
statt mit i zu zählen und das dann in anzahl zu kopieren?

Und zum eigentlichen Problem:
Alles in der while-Schleife ist überflüssig.

Erstens zählst du nur jede zweite Zeile.
Im while(...) wird nämlich eine Zeile eingelesen, und im if danach schon die Nächste.
Du zählst aber nur die vom if.

Die Compilerwarnung bezieht sich darauf, dass du beim if =='\n' hast.
fgets wird nie ein \n zurückgeben, sondern eine ganz andere Variablenart.
Deshalb die Warnung.

Statt dem ganzen if-fgets-else reicht aber wie gesagt ein einfaches anzahl++.

Gruß

edit: Sehr langsam bin ich heute :D
 
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++;
    }
}
 
Vielen Dank schon mal.
Ich habe die ersten Sachen schon mal geändert. if-else abfrage rausgenommen.
Nun benötige ich trotzdem noch eine Abfrage, ob wirklich nach dem 23 Zeichen eine Newline kommt oder die Koordinate länger ist.
 
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);
	}
	
}
 
Am Schluss der äußeren while-schleife musst du das j noch Nullsetzen, dann funktionierts. Wenn er kein '/n' findet, dann sucht er einfach weiter.
*
 
Zurück