通过void函数检索所有数据

时间:2017-03-15 10:30:29

标签: c++ function parameter-passing cin

一直想通过这个找到方法。我是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? ";
}

}

2 个答案:

答案 0 :(得分:1)

  

IMO,你应该先阅读一些关于C ++的内容。您缺少一些基本概念,并为您的关卡尝试过于复杂的练习。

<强> 1 函数未声明/定义。

<强> 2 声明userData接受参数,但不使用。

第3 您遇到的问题可能与我们称之为scope的内容有关:变量仅在其范围内存在且可见(通常由{}括起来。

在您的情况下,kmpointerdayspointer仅在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;
}