Leerzeichen finden

DeChecka

Erfahrenes Mitglied
Servus Leute!

Hab mal 'ne Frage bezüglich Leerzeichen.
Wieso kann ich die Leerzeichen in der Datei Text.txt nicht rausfinden, indem ich einfach char1 auf \0 überprüfe?
Ich lasse ja schließlich zeichenweise lesen...
Mein Quelltext:
Code:
ifstream text("Text.txt");
while(text)
 {
  char1=text.get();
  if(char1!='\0')
   gesamt=gesamt+1;
  //geht noch weiter ist ja aber wohl unwichtig;-)

Das komische: Der Compiler bringt zwar keinen richtigen Hinweis auf einen Fehler (also er markiert keine Zeile aus dem Quelltext rot), er bringt aber trotzdem folgendes:
Permission denied
Id returned 1 exit status

Falls es interessiert:
Dev-C++ als Compiler

Hoffe, ihr könnt mir weiterhelfen!

MfG
DeChecka
 
Thx, funktioniert wunderbar :) .

Allerdings dann noch 'ne Frage zu '\0':

Code:
char hauptmenu[10];

//Sind natürlich jetzt nur Schnipsel, nur das Nötigste, um das Problem zu verstehen...

std::cin.get(hauptmenu, sizeof(hauptmenu));
if(hauptmenu[0]=='\0')
     {
      std::cin.ignore();
      std::cout << "Bitte geben Sie eine Zahl von 1-4 ein!" << std::endl;
     }

Bei mir passiert folgendes: Wenn ich das Programm laufen hab, dann gar nichts eingebe und einfach 'ENTER' drücke, fängt das Prog an zu spinnen, sprich, es verfällt in eine quasi "Endlosschleife" , bringt ständig wiederholt die Aufforderung "Bitte geben Sie eine Zahl von 1-4 ein", aber so schnell, dass man gar nicht darauf reagieren kann.
Normalerweise müsste ich ja aber mit der hauptmenu[0]=='\0' Abfrage getestet werden, ob das erste Zeichen im Array das Ende-Zeichen für den String ist...

An was könnte das liegen?

MfG
DeChecka
 
moin


Ich seh zwar keine Endlosschleife, aber mit cin.get() kannst du kein "Enter-Zeichen" einlesen!
Außerdem wäre wenn es funktionieren würde hauptmenu[0] nicht ein '\0' sondern ein '\n', oder um genau zu sein ein (char)13.

Falls das alles nicht hilft, könntest nach dem if-Block hauptmenu[0] = '\0' setzen.
Und wenn das auch nciht hilft, mach noch ein fflush(stdin);

Sollte das auch alles nciht helfen, poste mehr von deinem Code.


mfg
umbrasaxum
 
Ok, danke, werde das nachher mal probieren!
Ich wollte auch nicht das 'ENTER' einlesen, nur wenn ich 'ENTER'' drücke, ohne irgendwas eingegeben zu haben, muss ja an erster Stelle gleich das '\0' stehen, da ja quasi der String gleich beendet wird.
Deshalb wollte ich diese Technik anwenden...
Habe ich übrigens von hier.

Code sieht dort wie folgt aus:
Code:
#include <iostream> 
#include <cstdlib> 

int main() 
{ 
  char Buffer[20]; 

  do 
  { 
    std::cout << "Geben Sie eine Zahl groesser gleich 100 ein: " << std::flush; 
    std::cin.get(Buffer, sizeof(Buffer)); 
    std::cin.ignore(); 
    if (Buffer[0] == '\0') 
      break; 
  } 
  while (std::atoi(Buffer) < 100); 
}

MfG
DeChecka
 
Hmm, geht leider sowohl mit '\n' als auch mit (char)13 nicht...

Hier mal etwas mehr Code:
Code:
std::cin.get(hauptmenu, sizeof(hauptmenu));
     std::cin.ignore();
     switch (std::atoi(hauptmenu))
     {
           case 1:
           {
                teamneu();
                break;
           }
           case 2:
           {
                teamanzeigen();
                break;
           }
           case 3:
           {
             //Hier kommt natürlich noch was hin...
           }
           case 4:
           {
                std::cout << "Wirklich beenden? (j/n)\t\t['n' bringt Sie wieder zum Hauptmenue]" << std::endl;
                std::cin.get(beenden);
                std::cout << std::endl << std::endl;
                break;
           }
           default:
           {
                std::cout << "Bitte geben Sie eine Zahl von 1-4 ein!" << std::endl;
           }
     }
     if(hauptmenu[0]=='\n')
     {
      std::cin.ignore();
      std::cout << "Bitte geben Sie eine Zahl von 1-4 ein!" << std::endl;
     }
     if (beenden == 'j')
       break;
    }
 return 0;
}

MfG
DeChecka
 
Zurück