Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » [warning] in funktion: switch

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.10.2003, 12:06 Uhr
~RedEagle
Gast



C++:
void notiz()
{
std::string dateiname;
std::string datei;

cout << "\nGeben sie bitte den Namen der HTML-Datei ein.";
cin >> dateiname;

datei = dateiname + ".html";
ifstream in(datei.c_str());  //.c_str() um mit strings zu arbeiten (s. vorh. zeile)
ofstream out(datei.c_str());

   out << "<html>" << endl;
   out << "<body>" << endl;

cout << "\nGeben sie bitte den HTML-Text ein.";
cout << "\nZum Beenden, den Befehl _end in die letzte zeile schreiben.";
cout << "\nFuer einen Zeilenumbruch den Befehl _next schreiben.";


std::string text;
int endless;
do
{
  endless = 0; //darf nie die 1 erreichen, um die bedingung nicht zu erfüllen
               //(Endlos-schleife entsteht)
  cin >> text;
  
  
     switch (text)
     {
     case "head[" : out << "<h1>";   break;
     case "]head" : out << "</h1>";  break;
    
     case "big["  : out << "<b>";    break;
     case "]big"  : out << "</b>";   break;
    
     case "mark[" : out << "<u>";    break;
     case "]mark" : out << "</u>";   break;
    
     case "bad["  : out << "<s>";    break;
     case "]bad"  : out << "</s>";   break;
    
     case "line"  : out << "<hr>" << endl;  break;
     case "next"  : out << "<br>" << endl;  break;
     case "free"  : out << "<p>"  << endl;  break;
    
       case "rot["  : out << "<font color=\"#ff0000\">"; break;
       case "]rot"  : out << "</font>"; break;
    
       case "blau[" : out << "<font color=\"#0000ff\">"; break;
       case "]blau" : out << "</font>"; break;
    
       case "gelb[" : out << "<font color=\"#ffff00\">"; break;
       case "]gelb" : out << "</font>"; break;
    
       case "grün[" : out << "<font color=\"#007f00\">"; break;
       case "]grün" : out << "</font>"; break;
    
       case "grau[" : out << "<font color=\"#9f9f9f\">"; break;
       case "]grau" : out << "</font>"; break;
      
       case "black[": out << "<font color=\"#000000\">"; break;
       case "]black": out << "</font>"; break;
    
     case "note[" : out << "<!--" << endl;  break;
     case "]note" : out << endl << "-->";   break;
    
     }
        
  if (text == "_end")
   {
    break;
   }
  
  if (text == "_next")
   {
    out << endl;
   }
  else
   {
    out << text;  
   }
}
while (endless != 1);

   out << endl;
   out << "</body>" << endl;
   out << "</html>";
}



Bei diesem "html editor " kommt bim Kompilieren immer die Meldung:

[Warning] in funktion:
switch

???
liegt das vieleicht daran, das "text" ein string ist????
WAS IST FALSCH??¿¿

MFG RedEagle

ps. Gibts vieleicht ne elegantere Lösung für die Endlos-schleife??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.10.2003, 12:15 Uhr
kronos
Quotenfisch
(Operator)


ich weiß nicht, ob das der grund für die warnung ist, aber switch vergleicht hier nur die speicheraddressen der strings. keines der cases würde je zutreffen. um strings zu vergleichen kannst du z.b strcmp oder strncmp verwenden, oder selbst schreiben.

edit: hoppla, du verwendest ja die string klasse. da kenn' ich mich nicht aus, geht aber glaub' ich auch nicht so, weil switch eine konstante erwartet...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 28.10.2003 um 12:16 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.10.2003, 12:19 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


für diesen fall der vergleiche würde ich eine art lookuptable empfehlen so wie ihn beefy bei dem rätsel mit den römischen zahlen verwendet hat.
das spart nerven und macht den code übersichtlicher
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.10.2003, 12:22 Uhr
~RedEagle
Gast


Bin Anfänger, und weiß nicht wie eine lookuptable aussehen soll??
habe auch nicht diese ratsel gefunden.

Währe nett, wenn einer einen link oder beispielcode in seine Antwort schreiben würde
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.10.2003, 12:41 Uhr
0xdeadbeef
Gott
(Operator)


Ich würds im Zweifel mit richtigen C++--Methoden machen. In diesem Fall std::map:

C++:
#include <map>
#include <string>

std::map<std::string, std::string> tag_table;

void init_table() {
  tag_table["head["] = "<h1>";
  //...
}

void notiz() {
  std::string dateiname;
  std::string datei;

  std::cout << "Geben sie bitte den Namen der HTML-Datei ein: ";
  std::cin >> dateiname;

  datei = dateiname + ".html";
  std::ifstream in(datei.c_str());  //.c_str() um mit strings zu arbeiten (s. vorh. zeile)
  std::ofstream out(datei.c_str());

  out << "<html>" << std::endl
      << "<body>" << std::endl;

  std::cout << "Geben sie bitte den HTML-Text ein." << std::endl
            << "Zum Beenden, den Befehl _end in die letzte zeile schreiben." << std::endl
            << "Fuer einen Zeilenumbruch den Befehl _next schreiben." << std::endl;

  std::string text;

  while(true) {
    std::cin >> text;
  
    std::map<std::string, std::string>::iterator itr = tag_table.find(text);
    if(itr != tag_table.end()) out << *itr;
    else if (text == "_end") break;  
    else if (text == "_next") out << std::endl;
    else out << text;  
  }
  out << "</body>" << std::endl;
      << "</html>" << std::endl;
}

int main() {
  init_table();
  //...
}


sowas in der Art.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 28.10.2003 um 12:43 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.10.2003, 12:44 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ist quasi nur eine diskrete funktion

wenn du sin(x) hast ist für jedes x ein wert angegeben und du kannst explizit eine Formel dafür angeben

wenn du aber z.b. sowas hast:
1->3
2->7
3->4
5->a
dann wirst du dafür keine funktionsvorschrift finden

bei sowas empfiehlt sich dann einfach ein 2d array in dem du dann die korrespondierenden werte gegenüber stellest


C++:
char [2][4]={{'1','2','3','5'},{'3','7','4','a'}};



[Edit] ups zu spät, machs lieber so wies beefy vorgeschlagen hat
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 28.10.2003 um 12:45 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.10.2003, 12:47 Uhr
~RedEagle
Gast


muss in der Funktion: void init_table() nichts zurückgegeben werden(return...)

wie wird denn z.B. <h1> in die datei geschrieben??

Trotzdem DANKE
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.10.2003, 12:50 Uhr
~RedEagle
Gast


Habe die Ausgabe gefunden :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: