C++ - "IF"-Bedingung ignoriert?

Diskutiere C++ - "IF"-Bedingung ignoriert? im Developer Network Forum im Bereich Hardware & Software Forum; Hallo PFler, ich häng mal wieder an einem C++-Stück. Wäre nett, wenn sich jemand die Zeit nimmt und sich Folgendes mal ansieht: (der gesamte...
  • C++ - "IF"-Bedingung ignoriert? Beitrag #1
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Hallo PFler,

ich häng mal wieder an einem C++-Stück. Wäre nett, wenn sich jemand die Zeit nimmt und sich Folgendes mal ansieht:

(der gesamte Code steht ganz unten)

mein Problem:
der Compiler scheint ein "IF" immer als "true" zu verstehen.

Code:
if (ch == '0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')
"ch" ist eine Variable vom Typ "char". Der Inhalt von "ch" wird mit einer "for"-Schleife aus einer Datei ausgelesen (Zeichen für Zeichen). Wenn "ch" ein im Code genanntes Zeichen ist, soll der "IF"-Block ausgeführt werden. Bisher wird der "IF"-Block allerdings immer ausgeführt. (die '0' hatte ich auch schon mal rausgenommen, da evtl. ein Leerzeichen als '0' interpretiert werden könnte, was allerdings unlogisch wäre)

Hier der gesamte Code:
Code:
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
using namespace std;

int main()
{
ifstream file;

file.open ("2509.kml", ifstream::in);

char ch;
int ko = 500;
string filter[ko*3];
long double koord[ko][3];
int anz = 0, z, su;
unsigned int i;
char suche[32000];
string ls;

for (i=0;i<32000;++i) 			// einlesen der gesamten Datei bis "LineString"
{			
  
  if (file.eof())				// Abbruch bei Dateiende
    {
    i = 32000;
    }
  
  ch = file.get();

  suche[i] = ch;
  
  if (suche[i] == 'g')
  {
    for (su=0;su<10;++su)
	{
	  ls += suche[i-9+su];
	  cout << ls << endl;
	}
  	
	if (ls == "LineString")
	{
	  cin.get();
      for (;i<32000;++i) 			// einlesen der gesamten Datei bis Anfang der Koordinaten
      {			    
        ch = file.get();
    //    suche[i] = ch;
		
	    if (ch == '0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')
	    {
		  cin.get();
		  for (;i<32000;++i) 			// einlesen der  Koordinaten
   		  {
		    ch = file.get();  
		    if (ch!=' ') 				// einlesen bis Leerzeichen
		    {
			  if (ch!=',') 				// einlesen bis Komma
	   		  {	
			    filter[anz] += ch;
			  }
			  else
			  {
			    ++anz;
			  }    
		    }
		      else { ++anz; }
	/*		if (ch == '<')
			{
			  i = 32000;
			}   */
	      }
		  
		}
		
	  }
	} 
	else 
	{
	  ls = "";
	}

  }
}

  for (z=0;z<=anz;++z)				// Ausgabe der ausgelesenen Koordinaten
  {
	cout << filter[z] << endl;
  }

  cout << endl << endl << endl;
		  
  int y;
  i = 0;
  for (z=0;i<=anz;++z)				// zuordnen der Koordinaten im Array
  {
	for (y=0;y<3;++y)
    {
	  istringstream strtofl(filter[i]);	// Umwandlung in Double
	  strtofl >> koord[z][y];
	  ++i;
	}
  }  

  for (i=0;i<z;++i)					// Ausgabe der sortierten Koordinaten
  {
	for (y=0;y<3;++y)
	{
	  cout << setprecision(17) << koord[i][y] << endl;
	}
   cout << endl;
  }   

file.close();

}

Schon im Vorraus vielen Dank für jede Hilfe!

edit: Der Compiler meldet keine Fehler oder Warnungen.
 
  • C++ - "IF"-Bedingung ignoriert? Beitrag #2
haiko

haiko

Bekanntes Mitglied
Dabei seit
09.01.2003
Beiträge
4.727
Reaktionspunkte
1
Ort
Kempten
musst du nicht überall ein ch == davor setzen? denn so hast du da zb auch ein if ('1') und das ist true. also einfach vor jede zahl ein ch== setzen
 
  • C++ - "IF"-Bedingung ignoriert? Beitrag #3
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
musst du nicht überall ein ch == davor setzen? denn so hast du da zb auch ein if ('1') und das ist true. also einfach vor jede zahl ein ch== setzen

Vielen Dank für Deine schnelle Antwort, ich probier's gleich aus. Das klinmgt auf jeden Fall logischer, als was ich mir bereits alles für einen Quatsch ausgedacht habe. :goil:

edit: ne, klappt leider auch nicht.

Mir fällt ein, ich hatte schon Ähnliches versucht...

trotzdem Danke
 
  • C++ - "IF"-Bedingung ignoriert? Beitrag #4
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Der Ausdruck "(ch == '0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')" liefert auch immer true zurück, z.B. '1' != 0 und damit true ist.

Es muß heißen:
(ch == '0' || ch == '1' || ch == '2' || usw. )
 
  • C++ - "IF"-Bedingung ignoriert? Beitrag #5
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Der Ausdruck "(ch == '0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')" liefert auch immer true zurück, z.B. '1' != 0 und damit true ist.

Es muß heißen:
(ch == '0' || ch == '1' || ch == '2' || usw. )

genau das schrieb haiko, funktioniert aber trotzdem nicht :no:

so schauts jetzt aus:
Code:
if (ch=='0'||ch=='1'||ch=='2'||ch=='3'||ch=='4'||ch=='5'||ch=='6'||ch=='7'||ch=='8'||ch=='9')
 
  • C++ - "IF"-Bedingung ignoriert? Beitrag #6
haiko

haiko

Bekanntes Mitglied
Dabei seit
09.01.2003
Beiträge
4.727
Reaktionspunkte
1
Ort
Kempten
zur not probiers mit if(strcmp(ch, "1") == 0 || strcmp(ch, "2") == 0 ...), hab ich aus nem anderen forum.
 
  • C++ - "IF"-Bedingung ignoriert? Beitrag #7
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Danke nochmal, haiko.


Aber wie das so ist, ist die Lösung meist die Trivialste: ich habe den code unter einem anderen Dateinamen gespeichert und compiliert - jetzt geht's :confused: :confused: :app:

Danke für Eure Mühen!
 
  • C++ - "IF"-Bedingung ignoriert? Beitrag #8
N

nic_power

Senior Moderator
Dabei seit
27.12.2000
Beiträge
7.838
Reaktionspunkte
2
Hallo,

zur not probiers mit if(strcmp(ch, "1") == 0 || strcmp(ch, "2") == 0 ...), hab ich aus nem anderen forum.
Das funktioniert nicht, da "ch" ein char und kein Zeiger (char *) ist.

Nic
 
  • C++ - "IF"-Bedingung ignoriert? Beitrag #9
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
Kürzer kann man den if-ausdruck auch so schreiben:

if ('0'<=c && c<='9') ....
 
Thema:

C++ - "IF"-Bedingung ignoriert?

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben