我的问题是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();
}
答案 0 :(得分:1)
这里有两个问题:
while(b!=a[25])
当程序执行到达循环时,b
未初始化。
a[25]
不是您可以使用的有效位置。
要解决第一个问题,请将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。它匹配数组元素。