掲示板ランキング  レギュラー(ブルーマウンテン)  レギュラー(マンデリン)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7446

逆ポーランド記法の評価について
投稿者---マサキ(2007/05/16 21:18:54)


初めまして。本日、学校でこのようなプログラムをやりました。


#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

/* 構造体の定義 */
struct cell {
double num;
struct cell *next;
};

/* リストの先頭アドレスを指すポインタを Global で定義 */
struct cell *listhead = NULL;

/* 関数のプロトタイプ宣言 */
void push(double);
void pop(double *);

int main(void){
int c;
double op, op1, op2, val;

while ( ( c = getchar() ) != '\n' ){
if( isdigit(c) ){
ungetc( c, stdin );
scanf("%lf",&val);
push(val);
}
else{
switch(c){
case '+' :
pop(&op2);
pop(&op1);
push(op1+op2);
break;
case '-' :
pop(&op2);
pop(&op1);
push(op1-op2);
break;
case '*' :
pop(&op2);
pop(&op1);
push(op1*op2);
break;
case '/' :
pop(&op2);
pop(&op1);
if(op2 == 0){
printf("0 による除算はできません。\n");
exit(1);
}
push(op1/op2);
break;
}
}
}

if(!listhead->next){
pop(&op);
printf("答えは %f です.\n",op);
}
else{
printf("ERROR/n");
}
return 0;
}

void push(double val){
struct cell *p;
p = listhead;
listhead = (struct cell *)malloc(sizeof(struct cell));
listhead->num = val;
listhead->next = p;
}

void pop(double *p){
struct cell *q;
if(listhead){
*p = listhead->num;
q = listhead;
listhead = listhead->next;
free((void *)q);
}
else{
printf("スタックにデータがありません。\n");
exit(1);
}
}


このプログラムで

if( isdigit(c) )

の部分と

ungetc( c, stdin );

の部分がよくわかりませんでした。
このif文の条件はどのような意味なるでしょうか?

また、ungetcに使われているstdinとは何なのでしょうか?

かなり初歩的な質問かもしれませんが、答えていただけるとありがたいです。
宜しくお願いします。





この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:逆ポーランド記法の評価について 7447 επιστημη 2007/05/16 23:17:59
<子記事> Re:逆ポーランド記法の評価について 7449 asd 2007/05/17 10:47:08
<子記事> Re:逆ポーランド記法の評価について 7450 円零 2007/05/17 12:42:10


No.7447

Re:逆ポーランド記法の評価について
投稿者---επιστημη(2007/05/16 23:17:59)
http://blogs.wankuma.com/episteme/


>if( isdigit(c) )
>の部分と
>ungetc( c, stdin );
>の部分がよくわかりませんでした。
>このif文の条件はどのような意味なるでしょうか?
>
>また、ungetcに使われているstdinとは何なのでしょうか?

学校でやってるんなら先生に教わればいいのに。



この投稿にコメントする

削除パスワード

No.7448

Re:逆ポーランド記法の評価について
投稿者---あ(2007/05/17 09:52:40)


もしくは友達に聞けばいいのに。

掲示板で聞くくらいなら、「isdigit」「stdin」でgoogle検索すれば、
情報量も多くてよっぽど早く分かるのに。


この投稿にコメントする

削除パスワード

No.7449

Re:逆ポーランド記法の評価について
投稿者---asd(2007/05/17 10:47:08)


同じような質問がされていたのでリンクしておきます。
http://www.play21.jp/board/formz.cgi?action=res&resno=7642&page=&id=dixq&rln=7647


この投稿にコメントする

削除パスワード

No.7450

Re:逆ポーランド記法の評価について
投稿者---円零(2007/05/17 12:42:10)


この辺りがわかりやすいかも。

isdigit: setp95. 文字コード識別関数[4]
stdin: 標準入出力




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ