2016-06-24 15 views
-2

質問: - ユーザーが5つの番号を取得し、番号を検索するプログラムを作成します。 私の試み: - 問題のなぜ出力が間違っていますか?

#include<stdio.h> 
#include<conio.h> 
void main() 
{ 
    int a=2,b;char directory[5];int i; 
    printf("enter a number you want to find"); 
    scanf("%d",&a); 
    for(i=0;i<5;i++) 
    { 
     scanf("%d",&directory[i]); 
    } 
    if(a=directory[i]); 
     printf("number is found"); 
    else 
     printf("number not found"); 
    getch(); 
} 

説明: - を私はすでにint a = 2を与え、入力の一つとして2を含む5つの値を入力した後が、出力は数を見つけていないことが出てきます。..私を示唆私が取り組むべき変化や部分。 ありがとうございました!

EDIT 1: -の回答で提案された変更を実行した後のコードは、この のように見えますが、私はまだ

#include<stdio.h> 
#include<conio.h> 
void main() 
{ 
    int a=2,b;char directory[5];int i; 
    printf("enter a number you want to find"); 
    scanf("%d",&a); 
    for(i=0;i<5;i++) 
    { 
     scanf("%d",&directory[i]); 
     if (a==directory[i]) 
     { 
      printf("number is found"); 
     } 
     else 
      printf("number not found); 
     } 
    } 
    getch(); 
} 
+0

を初期化didntはなぜ '2'に 'A'を初期化? –

+0

'='は割り当てであり、比較ではありません。 – melpomene

+0

ループの後、 'i'は5です。' directory [5] 'が範囲外です。 – melpomene

答えて

1
char directory[5] 

正しい出力を得ていないのですこれは、タイプintであることが必要です。また、%dに引数としてchar *を渡すと、プログラムは未定義の動作を示します。

そして、これがforループ内でなければなりません -

if(a==directory[i]); // out of loop i is out of bounds 
    printf("number is found"); 
else 
    printf("number not found"); 
+0

配列に2を入力しなかった場合でも、次の変更を行った後、出力に "Number Found"と表示されます。 – Saubhagya

+0

@iCasメルポメーンはコメントで指摘されているように、 'if(a == directory [i])'でなければなりません。 – ameyCU

+0

申し訳ありませんが、私はまだ正しい出力を得ることができません、私は正確なコーディングを手伝ってくれるでしょうか? – Saubhagya

2

%dintを期待しているが、char directory[5]char値です。

if(a=directory[i]); 

あなたがすべきである:これはまた、あなたが唯一のループのために以前に5行の配列になりますの終わりにiの値を見ている

int directory[5]; 

と呼ばれるべきです代わりに、forループと言っている:あなたは私のifで注目すべき

for(i = 0; i < 5; i++) 
{ 
    if(a == directory[i]) 
    { 
     printf("number is found"); 
    } 
    else 
    { 
     printf("number not found"); 
    } 
} 

つ以上のものが==とエンディングです。 =を1つ使用することは、directory[i]という値に等しくなり、aが真(0以外の場合)または偽(0)の場合はブール値をチェックするという代入です。 ==と書くことは、それらが同じ値を持っているかどうかを確認することです。

ifの末尾にセミコロンがあります。これにより、ifは無意味になります。ブロックはブロックの最後で停止します。

EDIT あなたの新しい編集では、あなたはまだ代わりにint

char directory[5]; 

char配列があるべき使用している:

int directory[5]; 

私はそれだけでコピーペーストの問題だったと仮定していますあなたの他の場所には開かれていません。閉じる}を取り出すか、もう一方を追加します。また、この1のコピー・ペーストの問題を想定していますが、行の閉鎖を「不足している:

printf("number not found); 
0
if(a=directory[i]); 

文はセミコロンで終了しない場合は
はあなたが意味:!

for(i=0;i<5;i++) 
{ 
    scanf("%d",&directory[i]); 
    if(a == directory[i]) 
    { 
     printf("number is found"); 
    } 
    else 
    { 
     printf("number not found"); 
    } 
} 
getch(); 
0

最初の間違い、あなたは

int directory[5] 

第2のMIS intとして配列を宣言する必要があります取るかの状態にあなたが使用する必要があります「=」演算子 「==」演算子を使用して値を割り当てることである

if(directory[i]==a) 

「=」代入演算子

ある場合、他のループ

のためにする必要があります
0

コード内 charディレクトリ[5] //それを別の整数と比較するために整数として宣言する必要があります if(a = directory [i]); //ここでセミコロンを使う必要はありません。それは意味がありません if(a = directory [i]); //比較するには=の代わりに==を使用する必要があります。 最後に、ループ内でそれらを作成します。ハッピーコーディング

0

あなたが投稿したプログラムのバージョンにいくつかの問題があるようです。私は以下にそれらを修正する自由を撮影した:

#include <stdio.h> 
#include <stdbool.h> 

int main() 
    { 
    int a=2, b, i; 
    int directory[5]; 
    int found=false; 

    printf("Enter a number you want to find: "); 
    scanf("%d",&a); 

    printf("Enter the numbers you want to check\n"); 
    for(i = 0 ; i < 5 ; i++) 
    scanf("%d", &directory[i]); 

    for(i = 0 ; i < 5 ; ++i) 
    { 
    if(a == directory[i]) 
     { 
     found = true; 
     break; 
     } 
    } 

    if (found) 
    printf("number is found\n"); 
    else 
    printf("number not found\n"); 
    } 

最も重要なことは、元のコードは、それらのいずれかが目標値に一致するかどうかを確認するために入力した値の配列をループしたことがないということです。さらに、チェックされた「入力値」は実際には配列内になく(使用されたインデックスは配列の有効なインデックス値の範囲外でした)、「比較」は代入としてコード化されました( '='は'=='の代わりに使用される)、チェックされたのは、配列の終わりの後のバイトの値がゼロか非ゼロかどうかでした。このバージョンのプログラムでは、配列はchar

ベストではなくタイプintであると定義されています。あなたはそれで数でスキャンするつもりなら

+0

stdbool.hとは何ですか?int found = falseを説明できますか? <それを使い、見つかった=真実? – Saubhagya

+0

[stdbool.h](http://pubs.opengroup.org/onlinepubs/009695399/basedefs/stdbool.h.html) –

0

そして、あなたが.ITのロジック障害に

int directory[5] 
+0

これを修正する方法は?どこで初期化するのですか? – Saubhagya

関連する問題