【问题标题】:Command line float input and output using streams使用流的命令行浮点输入和输出
【发布时间】:2011-10-14 17:11:48
【问题描述】:

我在这个网站上的第一个问题是:

我正在处理一个教程问题,它要求我编写一个程序,从命令行输出一些输入的浮点数的乘积:这将使用流来完成。 现在在我的教程书中,它建议使用以下代码:

#include <iostream>
#include <cstdio>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include <cstdlib>
#include <istream>
using namespace std;

int main(  int argc, char* argv[] ) 
{  

          float data[20];
          int i;
          float sum;

          for(i=1;i<argc-1;i++){

              istream cinx(81,argv[i];

              cinx>>data[i];
              cout<<data[i];

              sum=sum+data[i];
         }
         cout<<"\nsum = "<<sum;
}

所以我尝试了上面的代码和许多不同的变化,直到我的头发掉光了! - 但无济于事,因为它没有编译,而是我收到错误消息:

"没有匹配的函数调用`std::basic_istream >::get(char**&, int)"

任何建议将不胜感激。

【问题讨论】:

标签: c++ stream command-line-arguments


【解决方案1】:

感谢您帮助 outybungalobill 和 Paul R.

最终编译运行成功的代码是:

#include <iostream>
#include <sstream>

using namespace std;

int main(  int argc, char* argv[] ) 
{  

          float data[20];
          int i;
          float sum = 0.0f;

          for(i=1;i<argc;i++){


              istringstream cinx(argv[i]);

              cinx>>data[i];
              cout<<data[i];

              sum=sum+data[i];
         }
         cout<<"\nsum = "<<sum<<"\n";

   system ("PAUSE");
   return 0;
}

【讨论】:

  • 感谢本站用户的正确方式是点赞并接受他们的回答。
  • 希望你现在快乐,老兄,试图给你投赞成票,但需要更高的声誉! - 所以无论如何我接受了你的回答,你现在被提升到最高职位。还有什么我可以为你做的吗--也许可以把你的靴子擦干净?
【解决方案2】:

istream 构造函数需要一个流缓冲区。您可能想使用 istringstream:

istringstream cinx(argv[i]);

和开头的#include &lt;sstream&gt;。

此外,您计算的是总和,而不是乘积。

【讨论】:

  • 非常感谢帮助 outybungalobill 我尝试了您的建议,代码编译成功。非常有帮助,但我不明白您的意思是:“您计算的是总和而不是乘积” - 它们不一样吗?
  • @user993858:总和是加法的结果。乘积是乘法的结果。
  • 是的,当然 - 我一开始就不知道这一点,我觉得有点愚蠢!(我做过,但只是有点忘记了!)所以我猜你的意思是 istringstream 更适合总和不是某些浮点数的乘积?
  • 是的,我看到了我的另一个错误——在上面的开场问题中,我说我想计算乘积,但实际上我想计算总和,所以感谢您指出这一点。
【解决方案3】:

您缺少括号。更改此行:

          istream cinx(81,argv[i];

到这里:

          istream cinx(81,argv[i]);

您还需要初始化sum - 更改:

      float sum;

到:

      float sum = 0.0f;

而且你在命令行参数的数量上也差了一个 - 改变:

      for(i=1;i<argc-1;i++){

到:

      for(i=1;i<argc;i++){

【讨论】:

  • 代码已使用您的更正和使用 #included 的 istringstream 成功编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多