C言語関係掲示板

過去ログ

No.397.while( *p )の意味

[戻る] [ホームページ]

No.2727

while( *p ) ってどういう意味ですか?
投稿者---すず(2002/09/18 11:28:38)


お久しぶりです。すずです。

最近、情処の午後の勉強に取り組んでいるのですけど、
どこでこのソースを見たのか覚えてなくて、うる覚えで申し訳ないのですが、
処理は、入力された数値を計算するというものです。
(電卓のイメージ)
その中で、 while( *p ) という記述があったのですが、
どういう意味なのでしょうか?

そのときは、無限ループなのかなと勝手に判断していたのですが、
あやふやなままにしていたので、いまごろになって疑問になってきました。

ソースもまったく覚えていません。どこで見たのかも覚えていません。
ただ、main関数と、計算関数に分かれていて、
数値入力は、scanfなどを使って、main関数内で入力し、
その入力された数値を引数として、計算関数に渡して、
その結果をmain関数に戻すといったような内容だった思われます。
そして、その計算関数の中で、

while( *p ){
 /* 算術計算 */
 break;
}


このように記述されていたと思われます。
無限ループなのかなと勝手に判断したのですが、
やはりそれは間違いのでしょうか。

どういった意味があるのかわかりません。

どなたか、ご教授お願い致します。


No.2728

Re:while( *p ) ってどういう意味ですか?
投稿者---すず(2002/09/18 12:05:02)


すずです。
先ほど見失ったソースを発見しました。

while( *p )について、どなたかご教授ください。

#include        < stdio.h >

/* マクロ定義 */
#define RESULT_ERROR    ( -1 )
#define RESULT_SUCCESS  0

/* 関数のプロトタイプ宣言 */
char    parseOpe();
long    parseValue();

/* グローバル変数宣言 */
char    *p;

/* メイン関数 */
int     main (  )
{
        char    buffer[ 128 ];
        long    value1,value2;
        char    ope;

        while ( (p = gets(buffer)) != NULL ){
                value1 = parseValue();
                while ( *p ){
                        ope = parseOpe();
                        value2 = parseValue();
                        if( ope == '+' )
                                value1 += value2;
                        else if( ope == '-' )
                                value1 -= value2;
                        else{
                                puts("不正な演算です");
                                return RESULT_ERROR;
                        }
                }
                printf("%s = %ld\n",buffer,value1);
        }
        return RESULT_SUCCESS;
}


/* 正の整数文字列を数値に変換する処理 */
long    parseValue()
{
        long value = 0;

        while ( *p ){
                char ch = *p;
                if( ch < '0' || ch > '9' )
                        break;
                value *= 10;
                value += ch - '0';
                p ++;
        }
        return value;
}


/* 演算子の文字を得る処理 */
char    parseOpe()
{
        return *p ++;
}


No.2729

Re:while( *p ) ってどういう意味ですか?
投稿者---PSB(2002/09/18 12:13:48)


while(*p != '\0')
と書けばわかりますか?
このソースでは文字列の最後まで処理続行するぞ、と
いう意味のようです。
勿論pの値に変化が無ければ無限ループに陥りますが、
関数parseXXXの中でインクリメントされてますよね。


No.2730

ありがとうございます
投稿者---すず(2002/09/18 13:10:08)


>while(*p != '\0')

ありがとうございます。
すっきりしました。

また何かのときは宜しくお願い致します。