为什么我输错了?

时间:2016-06-24 17:48:28

标签: c

问题: - 编写一个程序,由用户取五个数字,找到或不找到一个数字。 我的尝试: -

#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并输入了5个值,其中包括2作为输入之一,但输出结果是未找到的数字..建议我需要处理的更改或部分。 谢谢!

编辑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();
}

7 个答案:

答案 0 :(得分:2)

%d期待intchar directory[5]char值。这应该被称为

int directory[5];

此外,您只查看i的值,该值在for循环结束时先前在该行的数组中为5:

if(a=directory[i]);

你应该有一个for循环说:

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

关于我的if,您应该注意的另外两件事是==和结尾。使用单个=是一个赋值,这意味着一个现在将等于directory[i]的值并检查布尔值,如果a为真(除了0之外的任何东西)或假(0)。将其写为==就是要检查它们是否具有相同的值。

if结束时你有一个半冒号。这使得if毫无意义。该块将在它结束时停止。

修改 在新的修改中,您仍然使用char数组而不是int

char directory[5];

应该是:

int directory[5];

我认为这只是一个复制粘贴问题,但是你错过了开头{在你的其他地方。取出关闭}或添加另一个。还假设这个问题的复制粘贴问题,但你错过了“在行中的结束:

printf("number not found);

答案 1 :(得分:1)

char directory[5]

这需要是int类型。同样,您将char *作为参数传递给%d,您的程序会显示未定义的行为。

这应该在for循环 -

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

答案 2 :(得分: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();

答案 3 :(得分:0)

第一个错误,你必须将数组声明为int

int directory[5]

第二个错误是在if条件下你用“=”运算符赋值 你应该使用“==”运算符

if(directory[i]==a)

“=”是赋值运算符

if和else应该在for循环中

答案 4 :(得分:0)

在您的密码中 char目录[5] //您需要将其声明为整数,以将其与另一个整数进行比较 如果(α=目录[I]); //你不需要在这里加分号它没有任何意义 如果(α=目录[I]); //您需要使用==而不是=进行比较 最后,让它们在循环中。快乐编码

答案 5 :(得分: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");
  }

最重要的是,原始代码永远不会循环输入值的数组,以查看它们是否与目标值匹配。另外,检查的“输入值”实际上不在数组中(使用的索引超出了数组的有效索引值的范围),并且“比较”被编码为赋值('='是用来代替'=='),所以检查的是数组结尾后字节中的值是零还是非零。在此版本的程序中,数组被定义为int类型,而不是char

祝你好运。

答案 6 :(得分:0)

你没有初始化。这是逻辑错误

int directory[5]