解决产生无限循环的数组问题时遇到麻烦

时间:2018-10-31 07:09:27

标签: c++

向用户询问1到9之间的数字。如果用户未输入1到9之间的数字,请反复询问一个整数值,直到他们输入为止。输入1到9之间的数字后,打印数组。给出数组-int array[] = { 4, 6, 7, 3, 8, 2, 1, 9, 5 };

#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;
}

2 个答案:

答案 0 :(得分:0)

您在这里遇到的是未定义的行为,是由于未从应该返回filter isPalindrome (split ' ' userInput) 的函数main = do userInput <- getLine let splittedInput = split ' ' userInput let palindromes = filter isPalindrome splittedInput let output = concat (intersperse "\n" palindromes) writeFile "file.txt" output 返回有效值引起的。

该标准解决了这个问题:

  

9.6.3返回语句
  ...
  2. ...否则,从printArray以外的函数的末尾流出会导致未定义的行为。

在GCC中使用int选项进行编译会产生以下警告:

main

由于该函数仅打印数据,因此您应使用-Wall而不是 warning: no return statement in function returning non-void [-Wreturn-type] 作为返回类型。

答案 1 :(得分:0)

  1. 我认为您不应该使用goto,而应该使用for
  2. int printArray(){行应为void printArray(){,因为您不需要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;
}