C++ 在解决产生无限循环的数组问题时遇到问题
请用户输入一个介于1和9之间的数字。如果用户未输入介于1和9之间的数字,则重复要求输入整数值,直到输入为止。输入1到9之间的数字后,打印数组C++ 在解决产生无限循环的数组问题时遇到问题,c++,C++,请用户输入一个介于1和9之间的数字。如果用户未输入介于1和9之间的数字,则重复要求输入整数值,直到输入为止。输入1到9之间的数字后,打印数组 #include<iostream> int printArray(){ int arraySize,i; int array[] = { 4, 6, 7, 3, 8, 2, 1, 9, 5 }; arraySize=sizeof(array)/sizeof(array[0]); std::cout<&
#include<iostream>
int printArray(){
int arraySize,i;
int array[] = { 4, 6, 7, 3, 8, 2, 1, 9, 5 };
arraySize=sizeof(array)/sizeof(array[0]);
std::cout<<"The length of the array is:"<<" "<<arraySize<<"\n";
for(i=0;i<arraySize;i++){
std::cout<<array[i]<<"\n";
}
}
int main(){
tryAgain:
int x;
std::cout<< "Enter any number between 1 and 9"<<"\n";
std::cin>>x;
if(x<=9 && x>=1){
printArray();
}
else
goto tryAgain;
return 0;
}
#包括
int printArray(){
int数组化,i;
int数组[]={4,6,7,3,8,2,1,9,5};
arraySize=sizeof(数组)/sizeof(数组[0]);
std::cout这里的行为是未定义的,因为没有从函数printary
返回一个有效值,该值应该返回int
本标准解决了这一问题:
9.6.3返回语句
…
2…否则,从函数末尾流出而不是main
会导致未定义的行为
使用GCC中的-Wall
选项编译会产生以下警告:
warning: no return statement in function returning non-void [-Wreturn-type]
由于函数仅打印数据,因此返回类型应为void
,而不是int
我认为你不应该使用goto
,而应该使用for
行int printary(){
应该是void printary(){
,因为您不需要return
以下code
可以工作:
#include <iostream>
void printArray(){
int arraySize, i;
int array[] = { 4, 6, 7, 3, 8, 2, 1, 9, 5 };
arraySize = sizeof(array) / sizeof(array[0]);
std::cout << "The length of the array is:" << " " << arraySize << "\n";
for (i = 0; i < arraySize; ++i)
std::cout<<array[i]<<"\n";
}
int main(){
for (;;) {
std::cout << "Enter any number between 1 and 9"<<"\n";
int x;
std::cin >> x;
if(std::cin.fail()) {
std::cin.clear();
std::cin.ignore(1024, '\n');
continue;
}
if (x < 1 || x > 9)
continue;
printArray();
break;
}
return 0;
}
#包括
void printary(){
int数组化,i;
int数组[]={4,6,7,3,8,2,1,9,5};
arraySize=sizeof(数组)/sizeof(数组[0]);
std::难道你不应该使用goto
进行简单的“重复直到某个条件`键入循环。你是否尝试打印x
以便知道你在看什么?如果printary()
不需要返回值,然后使函数返回类型void
notint
@John3136,如果这是问题所在,我不会感到惊讶。从编译器的角度来看,如果由于没有返回语句而到达函数末尾意味着UB,则循环条件决不能为真。说到这里,编译器C++。关于这个问题。克里斯是UB,如果结果没有被使用?P.W的答案是,但是我不相信这里是问题,因为我们从来没有尝试使用结果。你应该正确地缩进你的代码。BTW你的问题是什么?你的程序运行良好。@ Jang3136,它是在C++中,而不是C。(需要说明的是,如果不使用返回值,则仅在C中定义。)你的代码也产生了我所面临的同样的问题。当我给任何字符输入时,它会导致DEV C++中的无限循环。@ SoyIkySoh修正了你的代码错误太多了。而且很难理解。@ SoyIkySh修正它使用代码> STD::CIN < /代码>