Ich bin ein bisschen verrückt versuchen, eine sehr einfache Operation-Funktion in C als Anfänger, aber es scheint alles, was ich versuche fehlgeschlagen, obwohl es funktionieren soll.Der Versuch, einfache do_operation-Funktion in C
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int calcul(int nb1, int nb2, char *av)
{
int nb = 0;
if (av[2] == '*')
nb = nb1 * nb2;
if (av[2] == '%')
nb = nb1 % nb2;
if (av[2] == '/')
nb = nb1/nb2;
if (av[2] == '+')
nb = nb1 + nb2;
if (av[2] == '-')
nb = nb1 - nb2;
return (nb);
}
int atoi();
int main(int ac, char **av)
{
printf("%s", av[2]);
if (ac == 4)
printf("%d", calcul(atoi(av[1]), atoi(av[3]), av[2]));
return (0);
}
Es ist wie bei bald als das zweite Argument scheint, die der Betreiber ist, geht durch die calcul
Funktion, den tatsächlichen Charakter in verändern entweder es ist ASCII-Wert oder sonst etwas, so dass in dem Zustand nicht richtig erkannt wird .
Ich habe versucht, viele Möglichkeiten zu geigen und andere Schnipsel nachschlagen, aber das ist genau das, was sie taten und wie es funktionieren soll (auch wenn ich die printf
entferne), was mache ich falsch?
EDIT Tut mir leid, ich ändere absichtlich die Anzahl der Argumente, um einen segfault für etwas anderes zu bekommen, hier ist die "richtige" Funktion, die ich testen, für die ich das Problem bekomme.
Auch die Art, wie ich diese Funktion bin mit ist durch einen einfachen zusammengestellt prog unter diesem Format in der Schale ausgeführt wird:
./a.out 2 * 3
GELöST Wie @ Mike darauf hingewiesen, wenn die calculate Funktion Eingabe av [2 ] was nun der Operator ist, wurde als erstes und einziges Zeichenargument betrachtet, daher sollte es mit av [0] identifiziert werden. Was ist ein wenig verwirrend/schwierig.
Wenn Sie eine Shell verwenden, interpretiert sie Ihren Operator möglicherweise als Muster und ersetzt sie durch eine Erweiterung, wenn Sie sie in Ihrem Programm haben – jxh
Wie genau Soll dieses Programm aufgerufen werden? – dbush
Es scheint auch, dass Sie über das 'char ** av'-Array hinaus zugreifen. Wenn' ac == 4', dann sind die einzigen gültigen Indizes für 'av' 0 bis 3. – yano