而循环条件不起作用7

时间:2015-03-02 08:23:53

标签: c

我的问题是while循环。在数组中输入任何代码时,它会继续循环。我知道它很简单,但我认为while循环条件不正确。请帮忙!

#include<stdio.h>
#include<conio.h>
int main()
{
   int a[25]={
      4756,9870,5867,5241,2805,
      5490,4536,3458,3490,5666,1604,3045,1267,5766,
      2233,2938 ,3425,1837,6890,1029,7930,9348,2389,7689,3847
   },b;

   printf("\t\t\t ADABPO ENGINEERING\n");
   while(b!=a[25])
   {
      printf("Please enter your ID: ");
      scanf("%d",& b);
      if(b==a[0])
         printf("Welcome Mr/Mrs Ah-Fong Wan!");
      else if(b==a[1])
         printf("Welcome Mr/Mrs Aisac!");   
      else if(b==a[2])    
         printf("Welcome Mr/Mrs Alsong!");          
      else  if(b==a[3])
         printf("Welcome Mr/Mrs Ayassamy!");
      else if(b==a[4])
         printf("Welcome Mr/Mrs Balkins!");   
      else  if(b==a[5])
         printf("Welcome Mr/Mrs Bilbo!");               

      // ...

      else 
      {
         printf("Unable to identify,please try again!!\n");    
      }
   }  
   getch();
}

4 个答案:

答案 0 :(得分:1)

这里有两个问题:

while(b!=a[25])
  1. 当程序执行到达循环时,b未初始化。

  2. a[25]不是您可以使用的有效位置。

  3. 要解决第一个问题,请将while循环更改为do...while循环。 do...while循环首先执行主体,然后检查条件,从而至少执行一次主体和OTOH,while循环首先检查条件然后执行循环体,如果它是的。

    要解决第二个问题,我猜你想要a[24]。这是因为有效数组位置从a[0]开始,到a[24]而不是a[25]结束,因为数组索引从0开始而不是1。

    所以,你的程序将如下所示:

    #include<stdio.h>
    #include<conio.h>
    int main()
    {
       int a[25]={
          4756,9870,5867,5241,2805,
          5490,4536,3458,3490,5666,1604,3045,1267,5766,
          2233,2938 ,3425,1837,6890,1029,7930,9348,2389,7689,3847
       },b;
    
       printf("\t\t\t ADABPO ENGINEERING\n");
       do
       {
          printf("Please enter your ID: ");
          scanf("%d",&b);
          if(b==a[0])
             printf("Welcome Mr/Mrs Ah-Fong Wan!\n");
          else if(b==a[1])
             printf("Welcome Mr/Mrs Aisac!\n");   
          else if(b==a[2])    
             printf("Welcome Mr/Mrs Alsong!\n");          
          else  if(b==a[3])
             printf("Welcome Mr/Mrs Ayassamy!\n");
          else if(b==a[4])
             printf("Welcome Mr/Mrs Balkins!\n");   
          else  if(b==a[5])
             printf("Welcome Mr/Mrs Bilbo!\n");               
    
          // ...
    
          else 
          {
             printf("Unable to identify,please try again!!\n");    
          }
       }while(b!=a[24]);  
       getch();
       return 0;//main returns an int
    }
    

    请注意,当用户输入字符而不是scanf的数字时,您将面临许多问题。

答案 1 :(得分:0)

当声明一个数组a [25]时,元素的范围将从[0]到[24]。所以你的数组中没有名为[25]的元素。

实际上你的意思是比较b!= a [25]?

在你的情况下,最好使用do while循环,以便循环至少执行一次,然后它将检查条件。

do {
    ...........
    ............
}while(condition);

答案 2 :(得分:0)

阅读其余的答案,告诉你用do-while循环替换while循环,并注意你的数组索引问题。

然后准确定义您希望循环结束的时间。通过查看您的代码,我想您可能希望它在用户输入其中一个数字(其中任何一个,而不仅仅是[24])时结束。如果是这种情况,您必须以其他方式编写条件,因为将其写为不可行:

...
while(b != a[0] && b != a[1] && ... && b != a[24]);

一个想法是,当输入的值是预期值之一时,设置一个布尔标志:

bool validIdFound = false;
do {
    ...
    if (b == a[0]) {
        validIdFound = true;
    }

    ...
} while(!validIdFound);

答案 3 :(得分:0)

您可以使用以下代码 -

#include<stdio.h>
#include<conio.h>
int main()
{
 int a[25]={ 4756,9870,5867,5241,2805,
  5490,4536,3458,3490,5666,1604,3045,1267,5766,
  2233,2938 ,3425,1837,6890,1029,7930,9348,2389,7689,3847},b;

printf("\t\t\t ADABPO ENGINEERING\n");
while(1)
{
  printf("Please enter your ID: ");
  scanf("%d",&b);
  if(b==a[0])
  {
     printf("Welcome Mr/Mrs Ah-Fong Wan!");
     break;
  }
  else if(b==a[1])
  {
     printf("Welcome Mr/Mrs Aisac!");   
     break;
  }
  else if(b==a[2])    
  {
     printf("Welcome Mr/Mrs Alsong!");          
     break;
   }
  else  if(b==a[3])
   {
     printf("Welcome Mr/Mrs Ayassamy!");
     break;
    }
  else if(b==a[4])
  {
     printf("Welcome Mr/Mrs Balkins!");   
     break;
   }
  else  if(b==a[5])
  {
     printf("Welcome Mr/Mrs Bilbo!");               
     break;
  }
  // ...

  else 
  {
     printf("Unable to identify,please try again!!\n");    
  }
}  
getch();
return 0;
}

break条件用于出现立即循环,在这种情况下是while循环。 while(1)表示无限循环条件,用于再次遍历所有选项,直到用户输入有效的no。它匹配数组元素。