一直想通过这个找到方法。我是C ++的新手,并创建了一个简单的程序来获取用户数据,验证和cout到屏幕。我想要做的是让一个函数使用指针来获取用户输入并显示回来。这可能已经得到了回答,但我找不到好运。
到目前为止,我有以下代码
#include <iostream>
using namespace std;
void userData(int&);
int main(){
int a = 0;
int * kmpointer;
int * dayspointer;
userData();
cout << "You ran " << userData(kmpointer) << endl;
cout << "in " << userData(dayspointer) << "days!!" <<endl;
}
void userData(int& i){
cout << "Enter how Many Km's you ran:";
while (true)
{
cin >> kmpointer;
if ((cin) && (kmpointer >= 0) && (inputYear <= 100))
break;
cin.clear();
cin.ignore( 100, '\n' );
cout << "That can't be right!\n";
cout << "Enter how Many Km's you ran:";
}
cout << "How many days in a row did you run?";
while (true)
{
cin >> dayspointer;
if ((cin) && (dayspointer >= 1) && (dayspointer <= 100))
break;
cin.clear();
cin.ignore( 1000, '\n' );
cout << "Thats way to much!";
cout << "How many days in a row did you run? ";
}
}
答案 0 :(得分:1)
IMO,你应该先阅读一些关于C ++的内容。您缺少一些基本概念,并为您的关卡尝试过于复杂的练习。
<强> 1 强> 函数未声明/定义。
<强> 2 强>
声明userData
接受参数,但不使用。
第3 强>
您遇到的问题可能与我们称之为scope
的内容有关:变量仅在其范围内存在且可见(通常由{
和}
括起来。
在您的情况下,kmpointer
和dayspointer
仅在main
函数中可见,因此您无法在userData
中使用它们。
要解决这个问题,我建议您将这些变量作为userData
的参数传递。
<强> 4 强> 指针,参考,价值观:它们是不同的。您将用户输入保存为指针地址,这确实有问题。
常规强>
一般来说,您的代码充满了错误。尝试Hello world!
,然后逐步继续。
答案 1 :(得分:0)
关注您提出的具体问题(尽管您的代码中存在其他问题),请不要使用指针,使用引用。
在我们开始之前
cout << "You ran " << userData(kmpointer) << endl;
不会编译,因为你知道userData
是一个void函数,所以将<<
应用于它是没有意义的。这是无效的,所以没有什么可以流动的。
你说你想把参数传递给函数并让它们被改变,所以这样做。然后显示变量。 (不是void
函数调用的“结果”)。
正确获取用户输入是一个单独的问题,之前已经回答过。
#include <iostream>
using namespace std;
void userData(int& i, int& j, int& k);
int main() {
int a = 0;
int kmpointer;
int dayspointer;
//Here we call our function, ONCE
userData(a, kmpointer, dayspointer);
//Here we display what values we now have
//after calling the function, ONCE
cout << "You ran " << kmpointer << endl;
cout << "in " << dayspointer << " days!!" << endl;
}
//simplified to demonstrate changes to the reference parameters
void userData(int& i, int& j, int& k) {
//Here we have three parameters which we refer to as i, j and k
// They may have different names ousdie in the calling code
// but this function (scope) neither knows nor cares
j = 42;
k = 101;
}