Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Problem bei Stringverleich (https://www.delphipraxis.net/62741-%5Bc-%5D-problem-bei-stringverleich.html)

3_of_8 8. Feb 2006 19:59


[C++] Problem bei Stringverleich
 
Morgen.

Ich hab einen char op; und will den mit Stringkonstanten vergleichen.

Der Compiler meckert aber dort:

Code:
if(op=="+"||op=="-"||op=="*"||op=="/") break;
Die Fehlermeldung: ISO C++ forbids comparison between pointer and integer

Wenn ich statt char op; char op[1]; schreibe (ist ja maximal ein Zeichen lang) dann ist die Bedingung immer false.

JasonDX 8. Feb 2006 20:03

Re: [C++] Problem bei Stringverleich
 
In C unterscheidet sich ein Char von einem string auch in der schreibweise:
Code:
//String:
"Dies ist ein String"
//Char
'c'
Ein einfaches Hochkomma verwenden dürfte also helfen ;)

Zitat:

Zitat von 3_of_8
Wenn ich statt char op; char op[1]; schreibe (ist ja maximal ein Zeichen lang) dann ist die Bedingung immer false.

Das liegt daran, dass C hier konsistent ist und auch Strings 0-Indiziert, d.h. um ans erste element zu kommen: op[0] verwenden ;)

greetz
Mike


Edit:
Zitat:

Zitat von Chakotay1308
[edit]Och Mist... -.- Der blöde Info-1-Student aus München war schneller und richtiger als ich. :wall:[/edit]

Tja, entweder man hats, oder man hats nicht :mrgreen:

CalganX 8. Feb 2006 20:04

Re: [C++] Problem bei Stringverleich
 
Klammern.
Code:
if( (op=="+") || (op=="-") || (op=="*") || (op=="/") ) break;
Von Java weiß ich zwar, dass == stärker bindet als ||, allerdings weiß ich nicht, wie das bei C++ ist. Also würde ich mal davon ausgehen, dass C++ hier eine korrekte Klammerung erfordert.

Chris

[edit]Och Mist... -.- Der blöde Info-1-Student aus München war schneller und richtiger als ich. :wall:[/edit]

3_of_8 8. Feb 2006 20:12

Re: [C++] Problem bei Stringverleich
 
OK, hier mal mein ganzer Code, funzt nämlich immer noch nicht. Und == hat Vorrang vor ||.

Code:
#include <iostream.h>
#include <stdio.h>

int main(void){
 char op[1];
 int oprnd1, oprnd2, result;
 while(true){
  cout<<"Bitte geben sie einen arithmetischen Operator ein: ";
  cin>>op;
  if(op=='+'||op=='-'||op=='*'||op=='/') break;
  cout<<"Ungültiger Operator: "<<op<<"\n";
 }
 cout<<"Bitte geben sie den ersten Operanden ein: ";
 cin>>oprnd1;
 cout<<"Bitte geben sie den zweiten Operanden ein: ";
 cin>>oprnd2;
 if(op=="+") cout<<oprnd1<<"+"<<oprnd2<<"="<<oprnd1+oprnd2;
 if(op=="-") cout<<oprnd1<<"-"<<oprnd2<<"="<<oprnd1-oprnd2;
 if(op=="*") cout<<oprnd1<<"*"<<oprnd2<<"="<<oprnd1*oprnd2;
 if(op=="/") cout<<oprnd1<<"/"<<oprnd2<<"="<<oprnd1/oprnd2;
 getchar();
}

sniper_w 8. Feb 2006 20:16

Re: [C++] Problem bei Stringverleich
 
Code:
while(eingabe)
{
  cout<<"Bitte geben sie einen arithmetischen Operator ein: ";
  cin>>op;
  switch(op)
  {
  case '+':
  case '-':
  case '*':
  case '/':
  eingabe = false;
  break;

  default:
  cout<<"Ungültiger Operator: "<<op<< endl;
  break;

  }
}

HERMES 8. Feb 2006 20:16

Re: [C++] Problem bei Stringverleich
 
dann machs halt mit strcmp( OP, "+" )

3_of_8 8. Feb 2006 20:18

Re: [C++] Problem bei Stringverleich
 
Teste ich wann anderes mal, heute habe ich irgendwie keine Lust mehr...

Der Jan 8. Feb 2006 20:25

Re: [C++] Problem bei Stringverleich
 
char op; und nich char op[1];
zweites dekalriert einen Zeiger auf char also char*

3_of_8 8. Feb 2006 20:32

Re: [C++] Problem bei Stringverleich
 
Aha. Ich checke das zwar immer noch ned so ganz, aber egal.

Der Jan 8. Feb 2006 20:36

Re: [C++] Problem bei Stringverleich
 
Naja C/C++ ist zum Teil nich ganz easy, wenn man Delphi gewohnt ist :)

Also etwa so:

Code:
int main(void)
{
  char op;
  int oprnd1, oprnd2;
  while(true)
  {
    cout << "Bitte geben sie einen arithmetischen Operator ein: ";
    cin >> op;
    if(op == '+' || op == '-' || op== '*' || op == '/')
      break;
    cout << "Ungültiger Operator: " << op << "\n";
  }
  cout << "Bitte geben sie den ersten Operanden ein: ";
  cin >> oprnd1;
  cout << "Bitte geben sie den zweiten Operanden ein: ";
  cin >> oprnd2;
  switch(op)
  {
    case '+':
      cout << oprnd1 << "+" << oprnd2 << "=" << (oprnd1 + oprnd2);
      break;
    case '-':
      cout << oprnd1 << "-" << oprnd2 << "=" << (oprnd1 - oprnd2);
      break;
    case '*':
      cout << oprnd1 << "*" << oprnd2 << "=" << (oprnd1 * oprnd2);
      break;
    case '/':
      cout << oprnd1 << "/" << oprnd2 << "=" << (oprnd1 / oprnd2);
      break;
  }
  getchar();
}

Wobei noch zu erwähnen wäre, das du bei "/" wohl die Operanten nach double casten mußt, sonst gibts keine exakten Ergebnisse..


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz