我需要帮助。我的作业说:
要求用户输入数组的10个整数和整数v。程序必须搜索v是否为10个整数数组。如果整数v在数组中,或者“v不在数组中”,如果不是,程序会写“v在数组中”。
我的代码似乎很好,但它无法正常工作。请帮忙。
这是我的代码:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int main () {
const int size = 10;
int vars[size],temp = 0,v = 0;
int boolean = 0,choice;
string check = "";
for(int x = 0; x<10; x++){
cout<<"Enter 10 Numbers: ";
cin>>vars[x];
}
do{
cout<<"Enter V variable :";
cin>>v;
for(int x = 0; x <10; x++)
{
temp = vars[x];
if(temp == v){
check = "v is in the array";
}
else{
check = "v is not in the array";
}
}
cout<<check;
cout<<"\nContinue ?"<<endl<<"[1]yes"<<endl<<"[2]no"<<endl;
cin>>choice;
system("cls");
for(int x = 0; x<10;x++){
cout<<"index" <<x<<" = "<<vars[x]<<endl;
}
} while(choice != 2);
return 0;
}
答案 0 :(得分:2)
尽管没有任何IO错误检查,但您应该根据已完成的迭代建立消息check
值,而不是基于每次迭代。
此:
for(int x = 0; x <10; x++)
{
temp = vars[x];
if(temp == v){
check = "v is in the array";
}
else{
check = "v is not in the array";
}
}
cout << check;
无论如何,将执行循环迭代size
次,每次迭代重置check
并仅打印 last 迭代结果。你想要的是这样的:
int x = 0;
for(; x <size && vars[x] != v; ++x);
if (x == size)
std::cout << v << " is NOT in the array";
else
std::cout << v << " is in the array";
或者更好的是,使用标准库并停止重新发明轮子:
auto it = std::find(std::begin(vars), std::end(vars), v);
if (it == std::end(vars))
std::cout << v << " is NOT in the array";
else
std::cout << v << " is in the array";
答案 1 :(得分:0)
您正在运行循环10次。即使第一个数字是您正在寻找的答案,循环的第二次迭代将重写您的&#34;检查&#34;变量
中断if以退出循环或更改逻辑。
您看起来像个初学者,所以请参阅this以阅读有关break语句的更多信息。
答案 2 :(得分:0)
你的程序是正确的,除了最重要的是在你的循环中,当条件成功意味着找到数字V时你必须break
n命令不要在下一次迭代中改变。因此,尽管发现它不会继续迭代数组中断的所有元素。
for(int x = 0; x <10; x++){
if(vars[x] == v){
check = "v is in the array";
break;// You must add break to get out of the loop with `check = "v is in the array"`.
}
else{
check = "v is not in the array";
}
}