![]() |
[C++] Problem bei Stringverleich
Morgen.
Ich hab einen char op; und will den mit Stringkonstanten vergleichen. Der Compiler meckert aber dort:
Code:
Die Fehlermeldung: ISO C++ forbids comparison between pointer and integer
if(op=="+"||op=="-"||op=="*"||op=="/") break;
Wenn ich statt char op; char op[1]; schreibe (ist ja maximal ein Zeichen lang) dann ist die Bedingung immer false. |
Re: [C++] Problem bei Stringverleich
In C unterscheidet sich ein Char von einem string auch in der schreibweise:
Code:
Ein einfaches Hochkomma verwenden dürfte also helfen ;)
//String:
"Dies ist ein String" //Char 'c' Zitat:
greetz Mike Edit: Zitat:
|
Re: [C++] Problem bei Stringverleich
Klammern.
Code:
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.
if( (op=="+") || (op=="-") || (op=="*") || (op=="/") ) break;
Chris [edit]Och Mist... -.- Der blöde Info-1-Student aus München war schneller und richtiger als ich. :wall:[/edit] |
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(); } |
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; } } |
Re: [C++] Problem bei Stringverleich
dann machs halt mit strcmp( OP, "+" )
|
Re: [C++] Problem bei Stringverleich
Teste ich wann anderes mal, heute habe ich irgendwie keine Lust mehr...
|
Re: [C++] Problem bei Stringverleich
char op; und nich char op[1];
zweites dekalriert einen Zeiger auf char also char* |
Re: [C++] Problem bei Stringverleich
Aha. Ich checke das zwar immer noch ned so ganz, aber egal.
|
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.. |
Re: [C++] Problem bei Stringverleich
Zitat:
Zitat:
Mit op[1] legst du ein charArray an, also ist der Typ, den op am ende hat, char*, sowas wie ein normaler String, bei dir eben mit fixer Laenge 1. Du hast also nen Zeiger, und willst einen Zeiger mit einer Konstante vergleichen:
Code:
Wobei: "mops" ist ein String, am Ende also auch nur ein Zeiger. Normalerweise kann man Zeiger auf vergleichen, kein Problem, aber anscheinend ist es bei Konstanten eben ein bisschen anders. Damit duerfte die Loesung, die HERMES dir gegeben hat, naemlich strcmp, einwandfrei funktionieren.
char* z;
if (z == "mops")... Ich bin mir nicht sicher, aber was auch klappen duerfte waere folgendes:
Code:
op wird damit zu einem char degradiert und der vergleich kann ohne strcmp stattfinden.
char op;
cin >> op; und nochwas.... Zitat:
jedenfalls würde ich dir den Einsatz von leerzeichen empfehlen ;) greetz Mike Box? *grml8 |
Re: [C++] Problem bei Stringverleich
Zitat:
Warum "&" ? Warum refrenzieren? "op" ist ein char, also ein int (!!) und somit mit dem istream-operator ">>" problemlos zu "füllen" Edit: Ich seh grad im Original gibts kein "&" :gruebel: Hab aber echt auf Zitieren geklickt... Hmmmm. Dann betrachtet diesen Beitrag einfach als nicht geschrieben :) this = NULL (nochmal autsch...) |
Re: [C++] Problem bei Stringverleich
Zitat:
:zwinker: greetz Mike |
Re: [C++] Problem bei Stringverleich
Hmmm. :roll: Alte Leute verarschen :? Nich ernst nehmen... :drunken:
Zitat:
Code:
iBuf[i]=(char)(((c1-(c1<='9')?'0':('A'-10))<<4)+(c2-(c2<='0')?'9':('A'-10)));
|
Re: [C++] Problem bei Stringverleich
Zitat:
Zitat:
greetz Mike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz