2017-01-26 3 views
0

私のコードでは、私はintポインタとcharポインタの比較をしようとしています。 charポインタは、文字列strrchrの後に整数を保持することになっています。私は整数がintポインタに格納されている別の整数よりも大きいかどうかを確認したい。 strcmpを使うか、> =だけすると警告が出ます。 セミコロンの後にintが常に存在すると仮定します。 整数にその値を比較する第2の整数に文字列に入力されたintポインタとcharポインタを比較するにはどうすればよいですか?

typedef struct songInfo 
{ 
int* ratingScore; 
char songName[80]; 
struct songInfo *prev; 
struct songInfo *next; 
}songInfo; 

int main() 
{ 
songInfo *head = NULL, *tail = NULL; 
... 
} 


int insert(char *buffer, songInfo **head, songInfo **tail) 
{ 
... 
char* rating = strrchr(song, ';'); 
rating++; 
if ((*head)->ratingScore >= rating) 
... 
} 
+0

尖ったオブジェクトをどのように比較したいですか?整数として? – HolyBlackCat

+0

はい、整数として@HolyBlackCat – asa

答えて

2

あなた整数の文字列表現を変換する最初必要性は(一方はratingによって指さ)INTポインタによって指さあなたは言及します。

sscanfなどの関数を使用して文字列表現を整数に読み取って、読み取った値と整数ポインタが指す値を比較できます。以下は、あなたがしようとしていることを達成する可能性のあるサンプルコードです。

int tmp; 
sscanf(rating+1, "%d", &tmp); // +1 is to skip the ';' character 
if(*(*head)->ratingScore >= tmp) 
{ 
    ... 
} 

ratingScoreための間接参照演算子は原因私の答えにコメント欄でのint *であることratingScoreのタイプのあなたの言及に追加されたことに注意してください。仕事でこのアイデアの使用例を(また、私は理由を理解していないことに注意してください、あなたは* intとしてそれを維持するだろうが、上記のコードは、それにもかかわらず、あなたの制約を満たす必要があります)

Hereさん。

+0

私はatoi()を使ってこれを試したかもしれないと思います。しかし、私はまだ結果を比較するときに互換性のないタイプのエラーが発生していました。 – asa

+0

@asa ratingScoreの正確なタイプは何ですか? – ilim

+0

@asaこれがint *の場合は、これを使用する前に逆参照する必要があります。しかし、それがintの場合、私はあなたがそのまま使えると信じています。 – ilim

0

もちろん、さまざまなタイプの2つのポインタを比較することはできませんが、とにかくポインタよりも指し示された値を比較しようとしているようです。 @ilimは言ったように、あなたはstrtol(*rating, NULL, 0)または類似のものを使いたいと思っています。

0

評価ポイントを ';' 評価+ 1ポイントあなたの整数へのは、だからここにそれが行く A =税引後営業利益(定格+ 1) を言わせて:

char* rating = strrchr(song, ';'); 
if ((*head)->ratingScore >= atoi(rating+1)) 

今、あなたはratingScoreは整数が、整数、あなたへのポインタではないことを示したことそのポインタを逆参照する必要があります。だからここに行く:

char* rating = strrchr(song, ';'); 
if (*((*head)->ratingScore) >= atoi(rating+1)) 
+0

申し訳ありませんが、私がしたことを述べておきました。 – asa

関連する問題