C++ 在解决产生无限循环的数组问题时遇到问题

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<&

请用户输入一个介于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<<"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
    not
    int
    @John3136,如果这是问题所在,我不会感到惊讶。从编译器的角度来看,如果由于没有返回语句而到达函数末尾意味着UB,则循环条件决不能为真。说到这里,编译器C++。关于这个问题。克里斯是UB,如果结果没有被使用?P.W的答案是,但是我不相信这里是问题,因为我们从来没有尝试使用结果。你应该正确地缩进你的代码。BTW你的问题是什么?你的程序运行良好。@ Jang3136,它是在C++中,而不是C。(需要说明的是,如果不使用返回值,则仅在C中定义。)你的代码也产生了我所面临的同样的问题。当我给任何字符输入时,它会导致DEV C++中的无限循环。@ SoyIkySoh修正了你的代码错误太多了。而且很难理解。@ SoyIkySh修正它使用代码> STD::CIN < /代码>