2017-07-09 20 views
-4

を入力しました。ユーザーが入力した数値がcharリストに格納されています。その後、リストを調べ、その数値をint変数に代入しようとします。それは私がエラーに遭遇するところです。これは私のコードの抜粋です。文字を数値と比較するにはどうすればよいですか?現在のプログラムでC++

 if (list1[j]=='1'); 
      z=1; 
     if (list1[j]=='2'); 
      z=2; 
     if (list1[j]=='3'); 
      z=3; 
     if (list1[j]=='4'); 
      z=4; 

リスト[j] = 3でもzが常に4になるという問題があります。私は私の比較を間違えているが、私はそれを見つけることができなかったことを知っている。私はあなたの助けに感謝します。

これは私がリストを定義する方法である:

char list1[32]; 

そして、これは私がそれを埋める方法です:

for(int i=0;i<(2*c);i+=2) 
{ 
    cin>>list1[i]>>list1[i+1]; 
} 
+2

ifステートメントからセミコロンを削除します。 – pstrjds

+0

parenを閉じた後にセミコロンをドロップする: 'if(list1 [j] == '1')/ *セミコロンはここにない* /' –

+0

はい、私の悪いです。しかし、それは今では、常に数字が1であると考えているので、 –

答えて

0

あなたは、単一の数学のラインを使用してif文を置き換えることができますが:

z = list1[j] - '0'; 

これは、ほとんどのエンコーディングのために動作します。

注:上記のステートメントは、1桁の数字でのみ機能します。

編集1:switchif
あなたは比較に主張する場合、私はswitchが読みやすくなると考えている:

switch (list[j]) 
{ 
    case '1': z = 1; break; 
    case '2': z = 2; break; 
    case '3': z = 3; break; 
    // ... 
} 

上記単一の文はまだ少ないコード、欠陥のためのより少ないチャンスであります。

+0

私は今それを試してみることをお勧めします。 –

+0

両方の提案を試しました - どちらもうまくいます。私はスイッチが好きではありませんでしたが、明らかにこれらのようなシナリオでは非常に効率的です。 stackoverflowが私に許したら、私は答えを受け入れます。 –

0

あなたがする必要があるすべては、あなたのif文からセミコロンをドロップです。各if文の後にセミコロンを含めると、if文のコードブロックは実行されません。それは次のようになります。

if (list1[j]=='1') 
    z=1; 
if (list1[j]=='2') 
    z=2; 
if (list1[j]=='3') 
    z=3; 
if (list1[j]=='4') 
    z=4; 
+0

でした。問題は常にzが1に等しいということに変更されました。しかし、助けてくれてありがとう。 –

+0

私の下の答えは実際にあなたの問題を整理すべきです。 –

関連する問題