2017-11-15 5 views
0

私はscanfを使って数字と+、 - 、/演算子をスタックに入力しています。char *が他の文字列/数値よりも大きいかどうかを比較するには?

int scan = 1; 
char * p = malloc(sizeof(char)*5); 
while (scan = 1) { 
    scanf("%1s", p); 
    if(p>='0' && p<='9'){ 
     push(stack, p); 
     print(stack); 
    } 
} 

なぜこの条件に合致しないのですか?どのように文字列を比較できますか?

+0

文字自体( '* p')ではなく、ポインタ値(メモリ内のデータのオフセット)を' '0 ''と比較していますか? – mpen

答えて

2

さて、何がやりたいことは、文字列の最初の文字が「0」と「9」の間にあるかどうかをテストされている場合は、実行する必要があります。

(*p >= '0' && *p <= '9') 

しかし、あなたはとして文字列を比較したい場合文字列では、古い学校のCライブラリ関数はstrcmpです。最近は、もっと多くの機能を提供するライブラリがたくさんあると確信しています。

+0

ありがとう、私はまだ完全に私のポインタのまわりで頭を下ろす。初年度のコンピュータエンジニアとそのすべてがすばやく動いています。 * pと '9'とpと '9'との比較の相違点 –

+0

'p'はポインタ変数です。実際に含まれる値は、メモリ内の別の場所のアドレスです。これは単に 'p'を書くときに使用している値です。 '* p'は、pが指す位置の値を取得することを意味します。この場合、 'p'の型は' char * 'なので、その場所で' sizeof(char) 'バイトを読み込みます。 –

1

if(p>='0' && p<='9'){

p'0'がcharである、char*あります。あなたのコンパイラは、互換性のない型の比較について警告する必要があります。代わりに*pを使用してください(明らかに'9 'にも当てはまります)。私の頭の中で*pは "内容のp"として読み込まれます(この文脈では)

もっと一般的なケースでは、文字列を比較するのにstrcmp()を使用してください。

あなたのコンパイラが悪い比較について警告した場合:それを搭載して、ほとんどのコンパイラの警告を無視しないでください。コンパイラが警告しなかった場合、すべての警告を有効にする方法を調べます。

関連する問題