誰かがmyStringでstrok()を使用した後、どうしてぎこちなくなっていくのか説明してください。私の出力の写真が一番下にあります。私は、NULL文字としてのmyStringにすべての単一の要素を初期化しようとしたが、それでも私のコードdoesntの仕事:(RPN電卓(C言語)
予想される出力:
マイ出力:
int main()
{
int i;
char myString[60];
char *token;
float result;
float x;
float y;
struct Stack myStack;
StackInit(&myStack);
BOARD_Init();
printf("\nWelcome to my RPN calculator.\n");
printf("Enter floats and + -/* in RPN format: \n >");
for (i = 0; i < sizeof (myString); i++) {
myString[i] = '\0';
}
fgets(myString, sizeof (myString), stdin);
token = strtok(myString, " ");
while (token != NULL) {
printf("%f\n", atof(token));
token = strtok(NULL, " ");
if (atof(token) != 0) {
StackPush(&myStack, atof(token));
} else if (*token == '+') { // if token is addition
StackPop(&myStack, &y);
StackPop(&myStack, &x);
result = x + y;
StackPush(&myStack, result);
} else if (*token == '-') { // if token is subtraction
StackPop(&myStack, &y);
StackPop(&myStack, &x);
result = x - y;
StackPush(&myStack, result);
} else if (*token == '*') { // if token is multiplication
StackPop(&myStack, &y);
StackPop(&myStack, &x);
result = x * y;
StackPush(&myStack, result);
} else if (*token == '/') { // if token is division
StackPop(&myStack, &y);
StackPop(&myStack, &x);
result = x/y;
StackPush(&myStack, result);
}
}
while (1);
}
ないでくださいテキスト出力の画像をポストします。質問自体の中にテキストとして貼り付けます。これにより、他の人がコメント/質問の参照のために簡単にコピーすることができます。 – kaylum
また、[mcve]を投稿してください。見えないコードについてはコメントできません。完全なコードでも、プログラムを実行し、自分自身のためにプログラムを表示/デバッグすることができます。 – kaylum
'while(token!= NULL){ printf("%f \ n "、atof(token)); token = strtok(NULL、 ""); ':最初のトークンは破棄されます。 – BLUEPIXY