【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


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

No.21083

ここのif文がどうしても、作動しないんです。どうか教えてくださいm(_ _)m
投稿者---h・t(2005/05/18 19:01:01)


if('a'<=polish[i]&&polish[i] <= 'z' || '0'<=polish[i]&&polish[i] <= '9'
|| polish[i]=='+' || polish[i]=='-' || polish[i]=='*' || polish[i]=='/'
|| polish[i]=='^' || polish[i]=='(' || polish[i]==')' || polish[i]==' ') ;
else {printf("Syntax Error");


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ここのif文がどうしても、作動しないんです。どうか教えてくださいm(_ _)m 21084 REE 2005/05/18 19:06:44
<子記事> Re:ここのif文がどうしても、作動しないんです。どうか教えてくださいm(_ _)m 21085 RiSK 2005/05/18 22:37:56


No.21084

Re:ここのif文がどうしても、作動しないんです。どうか教えてくださいm(_ _)m
投稿者---REE(2005/05/18 19:06:44)


>if('a'<=polish[i]&&polish[i] <= 'z' || '0'<=polish[i]&&polish[i] <= '9'
> || polish[i]=='+' || polish[i]=='-' || polish[i]=='*' || polish[i]=='/'
> || polish[i]=='^' || polish[i]=='(' || polish[i]==')' || polish[i]==' ') ;
>else {printf("Syntax Error");

※環境(OSとコンパイラ)や症状は具体的に詳しく!



この投稿にコメントする

削除パスワード

No.21093

Re:ここのif文がどうしても、作動しないんです。どうか教えてくださいm(_ _)m
投稿者---επιστημη(2005/05/19 10:53:53)


'作動しない'とはどういう意味?
期待する結果と実際の結果を示してください。



この投稿にコメントする

削除パスワード

No.21085

Re:ここのif文がどうしても、作動しないんです。どうか教えてくださいm(_ _)m
投稿者---RiSK(2005/05/18 22:37:56)


> ここのif文がどうしても、作動しないんです。

コンパイラのバグは滅多なことではありません。
if 文は正しく翻訳されているはずです。
つまり,作動しないのではなく,
h・tさんの期待通りではないだけです。

コードは思った通りではなく,書いたとおりに動きます。


さて,なぜ期待通りではなかったのか?
それは条件式が複雑なのが原因の一つだと思います。
スッキリさせましょう。

> 'a' <= polish[i] && polish[i] <= 'z'

'a' < 'z' である保証はありません。可搬性がないコードです。
islower を使いましょう。

> '0'<=polish[i]&&polish[i] <= '9'

isdigit を使いましょう。

> polish[i]=='+' || polish[i]=='-' || polish[i]=='*' || polish[i]=='/'
> || polish[i]=='^' || polish[i]=='(' || polish[i]==')' || polish[i]==' '

is系の関数を自作した方が分かりやすいでしょう。
(あとで出てくる)isHoge, hoge は適切な名前に変更してください。

以下にテストコードを書きます。
# 本来はh・tさんが書くべき物です。
# 次回からはコンパイルが通るコードを張ってください。

動作を確認し,自分なりに分かったことをレスしてください。
最終的にどうなったかも報告してくださいまし。
#include <stdio.h>
#include <ctype.h>

int isHoge(int c)
{
    const int hoge[] = {'+', '-', '*', '/', '^', '(', ')', ' ',};
    int i;
    for (i = 0; i < sizeof(hoge) / sizeof(hoge[0]); ++i)
        if (c == hoge[i]) return 1;
    return 0;
}

int main(void)
{
    const int i = 0;
    int polish[1];
    polish[i] = getchar();

    if (islower(polish[i]) || isdigit(polish[i]) || isHoge(polish[i]))
        puts("true");
    else
        puts("false");

    return 0;
}



この投稿にコメントする

削除パスワード

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