【问题标题】:Retrieve the Value of An Integer Variable检索整数变量的值
【发布时间】:2011-01-11 04:36:50
【问题描述】:

这可能很容易解决,但由于某种原因,我无法在任何地方找到解决方案。也许我不是在寻找正确的东西。也许它在一些我没看过的初学者教程中。

无论如何,我想知道如何在 C++ 中检索整数变量的值?我知道您可以将cin.getline() 用于字符串变量,但是当我尝试使用整数变量时收到一条错误消息(当然,我知道这是错误的,但我正在寻找解决方案)。

我的项目是一个 Win32 控制台应用程序。我想要做的是要求用户输入一个数字,存储在变量n 中。然后我取n 的值并用它执行各种数学函数。在我的头文件中,我有stringwindowsiostreamstdiomathfstream。我需要添加另一个库吗?

编辑:

cout << "TEST SINE";
cout << "\nPlease enter a number.\n\n";
cin >> n;
break;

这是我尝试使用的代码。这就是我需要做的吗?如果是这样,我如何合并变量以便我可以使用 sin、cos 和 tan 对其进行测试?

再次感谢您。

【问题讨论】:

  • 使用 float 或 double 代替 int
  • 我才意识到,谢谢!我想我要把它改成双倍的。

标签: c++ variables integer


【解决方案1】:

这有什么问题?

cin>>n;

对于数学函数,float 或 double 会是更好的选择。

int main()
{
   double number;
   double result;

   cout<<"Enter a number:"<<endl;
   cin>>number;

   result = sin (number);  //if you consider number is in radians
   //result = sin(number*3.14159265/180.0) //if you consider number is in degrees    

   cout<<result;

   return 0;
}

【讨论】:

  • 可能没什么,但你应该解释一下n是用int n;初始化的。
  • 我正在使用它,但是每当我检索字符串变量时,我都必须使用 cin.getline()。我认为整数的方式相同。也许我错了,我只是对这个问题有点困惑(正如我所说,我觉得很愚蠢)。我将用我的代码更新帖子。
  • cin.getline() 一直读取直到遇到换行符。 cin &gt;&gt; n 读取直到看到空格。因此,如果用户输入10 20 30,您必须执行三次cin &gt;&gt; n 才能检索所有输入。但是,cin.getline() 将检索整个字符串。沿着同样的思路,如果你定义std:string s,然后做cin &gt;&gt; s,那么你只会得到"10"
  • @milkypostman:它直到空白本身才读取,但是直到输入对于它正在读取的内容不再有意义直到它得到空白。因此,如果输入为“5asdasd”,您仍然可以读取整数 5。
  • 是的,我要把它改成双倍。这是一个愚蠢的问题,我很抱歉。
【解决方案2】:

如果你想要一个整数,你可以使用:

cin >> n;

但如果您想要一个健壮的应用程序,您最好控制输入数据。

也许更好的主意是将它作为字符串输入,因为您已经知道如何处理 getline(),然后在调用转换函数(如 atoi()strtol())之前验证字符串是否包含所有数字字符.

这样,您可以获得可靠的输入以及所需的数据类型。

但是,如果您想使用三角函数,最好使用双精度数,使用 atof(),而不是整数。


这里有一个示例程序可以帮助您入门:

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cstring>
using namespace std;

int main (void) {
    char s[256];

    // Get and check line.

    cout << "Enter angle in degrees: ";
    cin.getline(s,100);
    for (char *ps = s; *ps != 0; ps++) {
        if (!isdigit (*ps)) {
            cout << "Not numeric" << endl;
            return 1;
        }
    }

    // Output string, float, sine and cosine (convert to radians first).

    float f = atof (s);
    cout << "String : '" << s << "'" << endl;
    cout << "Float  : " << f << endl;
    f = f * 3.141592653589 / 180.0;
    cout << "Sine   : " << fixed << sin (f) << endl;
    cout << "Cosine : " << fixed << cos (f) << endl;

    return 0;
}

示例运行如下所示:

Enter angle in degrees: 30
String : '30'
Float  : 30
Sine   : 0.500000
Cosine : 0.866025

Enter angle in degrees: 45
String : '45'
Float  : 45
Sine   : 0.707107
Cosine : 0.707107

Enter angle in degrees: 90
String : '90'
Float  : 90
Sine   : 1.000000
Cosine : -0.000000      (caused by floating point inaccuaracy).

【讨论】:

  • 哎呀,我是想@回复你。你给了我一个想法,但它说 std 命名空间没有 getline() 函数。
  • @Abluescarab:试一试。我已经对其进行了修改以使其更简单。
  • 谢谢您,很抱歉给您带来的麻烦和迟到的回复!
猜你喜欢
  • 2010-10-27
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多