2016-04-08 8 views
-1

i folgende Funktion zu schreiben, ich versuche, es wird 1 zurück, wenn prcd von op1>op2 (und wir gehen davon aus +-*/() nur Zeichen sind)Wie Charakter mit) oder vergleichen (in Steueranweisungen?

int prcd(char op1,char op2) 
{ 
    switch(op1) 
    { 
     case '(': 
      return 0; 
      break; 
     case ')': 
      if(op2=='(') //doesn't work 
      return 

     case '*': 
     case '/': 
     return 1; 
     break; 

     case '+': 
     case '-': 
      if(op2=='*' ||op2=='/') 
      return 0; 
      else return 1; 
     break; 

     default: 
      return printf("invalid"); 
    } 

} 
+3

Was meinen Sie mit "funktioniert nicht"? Was passiert, wenn Sie Ihre Funktion aufrufen? *Wie nennst du das? Mit welchen Argumenten? Können Sie bitte versuchen, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und uns zu zeigen? –

+0

Es gibt ein fehlendes Semikolon nach der Rückkehr in die Zeile unter dem Kommentar, aber das ist nicht das Problem, ist es –

+0

Nur als ein Punkt des Stils, brauchen Sie keine 'break' oder' else' nach einer 'return' Anweisung , da es nicht ausgeführt wird. Obwohl dein 'Fall') ': 'zum nächsten Fall durchfallen kann, da der' return' bedingt ist und der Fall keinen' break; 'hat ;-) –

Antwort

0
case ')': 
{ 
    if(op2=='(') //doesn't work 
     return 
} 

Neben dem Fehlen der;, geben Sie ohne den Wert (der ein Int ist) zurück

Nach erfolgreicher Rückgabe, printf Funktion geben Sie die Anzahl der gedruckten Zeichen zurück.Sind Sie sicher, dass dies das ist, was Sie wollen? Verwenden des Rückgabewerts von pr intf (7) als Fehler return. Wäre nicht etwas wie -1 besser?

Ich lege die Klammern für jeden Fall, weil es einfacher zu lesen und zu sehen, wie es eingerichtet ist. Ich setze auch die Pause in den Standard, obwohl es nicht benötigt wird, weil ich die Gewohnheit mit jedem Fall behalten will.

Sie wären besser dran mit.

int prcd(char op1,char op2) 
{ 
    int retval; 
    switch(op1) 
    { 
     case '(': 
     { 
      retval = 0; 
      break; 
     } 
     case ')': 
     { 
      if(op2=='(') 
      retval = 1; 
      break; 
     } 
     case '*': 
     case '/': 
     { 
      retval = 1; 
      break; 
     } 
     case '+': 
     case '-': 
     { 
      if(op2=='*' ||op2=='/') retval 0; 
      else retval 1; 
      break; 
     } 
     default: 
     { 
      retval = printf("invalid"); // value is 7 
      // would retval = -1; be a better error return? 
      break; 
     } 
    } 
    return retval; 
} 
+0

Was würden Sie über die Nützlichkeit des Rückgabewerts von 'printf' im Standardfall sagen? –

+0

Er könnte es als Test für einen Fehler verwenden, da es so viel größer ist als die anderen Werte. Ich sollte diesen Satz erweitern. Ich habe es gelassen, weil er es als Rückgabewert verwendet hat. Er könnte auch -1 oder etwas anderes zurückgegeben haben. – sabbahillel

0

wann immer Sie wollen Fall, dass Sie {statment} verwenden müssen, verwenden und Sie in den Code, den Sie anwenden müssen gestellt, wird eine andere Sache, die Sie Rückkehr verwendet haben, aber Sie sagen nicht, was zurückzukehren.