【问题标题】:Why my function isn't executing i++?为什么我的函数没有执行 i++?
【发布时间】:2012-04-21 00:14:36
【问题描述】:

我正在一个面向对象程序的类中编写一个 get 函数,但我的代码中的 i++ 由于某种原因没有执行。

这是我的 .cpp 文件中使用的内容:

char MyString::Get(int i)
{
  if( i = '\0')
  {
    exit(1);
  }
  else
  {
    return String[i];
  }
}

这是 main.cpp 文件中调用的内容:

for(int i=0; i < String1.Length()+1; i++) 
{
  cout<< String1.Get(i)<<" ";
}

cout << endl;

这是.cpp文件中的长度方法,仅供参考:

int MyString::Length()
{
  int counter(0);

  while(String[counter] != '\0')
  {
    counter ++;
  }

  return (counter);
}

另外:String1 = Jello World

输出:

JJJJJJJJJJJJJJ

【问题讨论】:

  • if (i = '\0') exit(1); 可能需要重新考虑。

标签: c++ string object for-loop


【解决方案1】:

嗯 - 可能是这个原因。您分配而不是比较。您将零分配给 i。 'if' 测试失败(它为零),所以 exit 没有被调用,其余的例程运行 i == 为零。

   if( i = '\0')
   {
       exit(1);
   }

【讨论】:

  • 除此之外,if (i == '\0') 将整数与字符文字进行比较。这可能不是你打算做的。非常仔细地重新考虑您要在这里做什么。
  • 我退出的原因(1);是因为这个:MyString 对象应该包含一个 Get(...) 方法,该方法返回字符串的第 i 个字符。如果索引 i 超出范围,则程序应退出 (1)。这是我们的说明中写的,但是我做错了还是我的教授弄错了?
  • 哦哦!我应该改为 if(String[i] = '\0')
  • 我想通了!!非常感谢大家!
【解决方案2】:

你没有真正展示足够的代码让别人能够弄清楚你的代码在做什么,但这看起来不正确:

  if( i = '\0')

单个= 符号会导致i 被赋予表达式右侧的值。
if( '\0' ) 的计算结果为if(false)

【讨论】:

    【解决方案3】:

    正如其他人指出的那样,您正在执行分配而不是比较,因此“比较”将始终被视为错误 - 比较的结果是分配的值,在这种情况下为 0。

    虽然它从未变得非常流行,但有一种相当简单的技术可以避免这个问题:当您与常量进行比较时,始终将常量放在左侧。这样,如果您将== 错误地输入为=,代码将无法编译:

     if ('\0' = i)   // error: lvalue required (or something on that order).
    

    【讨论】:

    • 虽然这样可以避免错误,但也会使代码混乱,相反,我建议打开警告,并注意它们。
    • @MooingDuck:我从来没有遇到过混淆问题,但我使用的编译器没有警告这一点,不管你把警告调到多远......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2014-07-03
    • 2017-07-31
    • 2021-01-06
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多