我一般都是编程的新手,更不用说C ++了。谁能告诉我为什么我的程序也返回原始变量值?
int whichNumber(int x); //prototype
int main() {
int x;
cout << "Enter a number in the range 1-5: ";
cin >> x;
int whichNumber(int x);
cout << "\n" << whichNumber(x) << "\n";
return 0;
}
//Functions
int whichNumber(int x){
string numbers[] = {"one.", "two.", "three.", "four.", "five."};
if(x == 1)
cout <<"You entered the number " << numbers[0];
else if(x == 2)
cout << "You entered the number " << numbers[1];
else if(x == 3)
cout << "You entered the number " << numbers[2];
else if(x == 4)
cout << "You entered the number " << numbers[3];
else if(x == 5)
cout << "You entered the number " << numbers[4];
else
cout << "Please enter a valid number.";
return x;
}
如果我没有把&#34;返回x;&#34;在我的函数结束时,它返回32766,我认为这是数组中的最大空间。只知道为什么会有很多帮助。虽然我希望它不会返回原始值。
谢谢大家的时间。如果有人回答,我很抱歉,我还没有在数据库中找到它。
我知道数组可能不是打印单词的最佳方式......但我不知道其他任何方式。仍然是编程的新手,我知道如何使用数组。
答案 0 :(得分:0)
如果您不希望它返回值,请将该函数设为void
返回类型。
void whichNumber(int x)
{
// do stuff...
return; ///< optional, void doesn't return anything
}
它正在返回int x
,因为这正是你告诉它的目的。
答案 1 :(得分:0)
x是包含传递给函数的数字的变量,并且您将再次返回相同的x。 在函数头中,将return数据类型设置为void并删除return语句。
答案 2 :(得分:0)
我想我意识到困惑在哪里,
当您通过其中包含print语句的函数调用whichNumber(x)
时,该调用足以使语句出现在 stdout 上。您不需要在cout
现在让我们修复您的whichNumber
功能。你的if梯子有点复杂,有更好的方法可以做到这一点。您对阵列的使用实际上是好的。
int whichNumber(int x) {
string numbers[] = {"one", "two", "three", "four", "five"};
if ((x > 5) || (x < 1)) {
cout << "Enter a valid number\n";
return 1; // returning 1 when a function fails is fairly common, though IMO in C++ I'd rather raise an exception
}
cout << "You entered " << numbers[x-1] << endl; // array indices start from 0
return 0;
}
并在main
转此
int whichNumber(int x);
cout << "\n" << whichNumber(x) << "\n";
到这个
int whichNumber(int x);
int s_code = whichNumber(x); // s_code has the success code of the func
正如其他人所建议的那样,如果您不想处理错误代码,那么void
函数的返回类型可能为whichNumber
此外,如果您在函数中没有return
任何返回类型不是void
的内容,则由编译器决定如何处理此问题。这称为未定义行为。这是一件坏事,你应该尽量避免它。
欢迎使用C ++,请查看有关您问题的第一条评论中的书籍:)