【问题标题】:c++ simple pointer program [closed]c ++简单指针程序[关闭]
【发布时间】:2014-02-20 08:04:03
【问题描述】:

这是一个简单的程序,它将命令行中发送的所有数字相加。它应该采用任意数量的值。 每行都给我一个0。我已经厌倦了进行一些更改,但它仍然提供相同的输出

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
   for (int i = 0; i < argc; i++)
{
     int sum=0;
     sum+=atoi("argc[i]");
     cout << sum << endl;
 }
return 0;
}

【问题讨论】:

  • 本书对此只字未提。我不是白痴在这里发帖是我最后的选择
  • @caustr01 这根本不是真的,这是一个非常简单的问题,如果你查看 C++ 的语法,任何谷歌搜索都可以解释,例如如何使用 atoi 函数和哪个变量in main() 给出命令行选项(在本例中为 argv)。
  • @avt 不。不不不。
  • 你应该从int i = 1开始你的循环,因为argv[0]通常保存被调用的程序的名字,而不是通过命令行传递的第一个参数。
  • 这个问题似乎是题外话,因为它表明提问者的理解很少或根本没有。

标签: c++ pointers atoi


【解决方案1】:

"argc[i]" 是一个文字字符串,所以当被atoi 转换时会得到0! sum 应该在循环之前初始化:

int main(int argc, char *argv[]) {
 int sum=0;
 for (int i = 1; i < argc; i++) {
   sum += atoi(argv[i]);
 } 
 cout << sum << endl;
 return 0;
}

通常argv[0] 是程序的名称(或者至少是在命令行中用于调用程序的名称),因此最好从索引 1 开始。

您需要花费数十个小时阅读更多书籍并在计算机上进行试验。在这里问这样一个基本问题对你没有任何帮助(而且被认为是粗鲁的......)。

不要忘记编译时启用调试信息和所有警告(例如,如果使用GCC,则使用g++ -Wall -g)。然后,学习如何使用调试器(例如gdb)。

【讨论】:

  • 成功了,非常感谢!还有礼貌。
【解决方案2】:

你的基础不太清楚,建议你看书。 程序应该是这样的:

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
   int sum=0;
   for (int i = 0; i < argc; i++)
   {

     sum+=atoi(argv[i]);
   }
   cout << sum << endl;
return 0;
}

【讨论】:

  • @BartekBanachewicz 查看我编辑的答案
  • 现在,如果您正确格式化代码,它不会为@Basile 的答案添加任何内容。
【解决方案3】:

将参数和移到循环外!!

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
    int sum=0;
    for (int i = 0; i < argc; i++)
    {

     sum+=atoi(argv[i]);
     cout << sum << endl;
    }
return 0;
}

【讨论】:

  • 这并不能真正解决任何问题。
  • 我也试过了,它说 sum 没有在这个范围内声明,这就是为什么我把它放在 for 循环中
  • 更新示例 -> argv[i]
  • @BartekBanachewicz:你说得对,我反应很快。当我确实在循环中看到 sum 变量时,我假设其余部分是正确的。我的坏..假设是所有失败之母
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多