私が書いたジェネリックスタックライブラリを使ってポストフィックス計算機を書いています。私はそれが宿題であり、通常はオンラインで助けを求めることはしませんが、教授センター/ヘルプルームは今日閉じられていると言ってこれを序文します。"ポインタ型に変換できません" C
私はstdin
から文字入力を受け取り、それをトークン化し、それが数、+
、-
、*
、または^
であるか否かを判断する機能「CALC」を持っています。私はすべてのケースでそれを前にテストしたので、トークナイザは動作します。
スタックライブラリを実装する際に問題があるようです。
これは、問題のコードです:
char num[MAX_NUM];
float n;
while (1) {
switch (token = get_tok(num, sizeof(num))) {
case TOK_NUM:
//printf("TOK_NUM: %s (%lf)\n", num, strtod(num, NULL));
n = strtod(num, NULL);
push(stk, (void *)n);
printf("TOK_NUM_STK: %lf\n", (float)peek(stk));
pop(stk);
break;
あり、他の文字に対処するための他のswitch文である(+、 - 、*、および^)が、私はまだそれらへ移動していません。
考えられるのは、文字配列num
を浮動小数点に変換することです。
プッシュ機能は、私のスタックライブラリの一部です。私は前に他のプログラムでそれを使用しているとして、それが予想されるので、私はそれについて心配していないよう
struct stack_t {
int count;
struct node_t {
void *data;
struct node_t *next;
} *head;
};
void push(stack stk, void *data) {
struct node_t *tmp = malloc(sizeof(struct node_t));
tmp -> data = data;
tmp -> next = stk -> head;
stk -> head = tmp;
(stk -> count)++;
}
スタックライブラリ作品:これはそのためのコードです。
push(stk, (void *)n);
は、私が今やろうとしているすべてがある:
私の問題は、私は私のpostfixの計算をコンパイルするとき、私はエラーを取得することを「ポインタ型に変換できません」と、それは、この行を参照していますユーザーの入力をstdin
から取り出し、スタックにプッシュしてスタックから読み込み、スタックからポップします。なぜこのエラーが出るのか分かりませんし、どうやって修正するのか分かりません。正しい方向に私を動かすための助けやヒントがあれば幸いです。
「n」のタイプは何ですか?バッファを割り当てて 'n'にデータを格納し、バッファにデータをコピーし、' n'を直接渡すのではなくバッファにポインタを渡す必要があります。 – MikeCAT
お詫び申し上げます。私はその行を含めるのを忘れてしまった。この行は 'while(1)'行の前に現れます。 'float n;' –
ドット( '.')または矢印(' - ')演算子の周囲にはスペースを入れないでください。彼らは確かに非常に緊密に結びついている。正統Cのどちらのサイズにもスペースがあってはいけません。はい、コンパイラは気にしません。しかし、あなたのコードを読んでいる人は、一般的に心に留めています。 –