超级基本代码:为什么我的循环没有破坏?

时间:2016-02-14 08:47:44

标签: c++ for-loop break

for(int i=0;i<50;i++,size++)
{
    cin >> inputnum[i];
    cout << size;
    if(inputnum[i] == '.')
    {
        break;
    }
}

中断会破坏输入流,但大小会保持输出。

大小的输出为012345678910111213...474849

我尝试将size ++放在循环中,但没有区别。之后的大小将等于50,这意味着它经历了完整的循环。

我忘了解释我添加了cout&lt;&lt;循环中的大小,用于调试/检查循环后输出为50的原因,即使我只输入了3个数字。

2 个答案:

答案 0 :(得分:0)

我怀疑inputnumint(或其他一些数字类型)的数组。当您尝试输入'.'时,实际上没有任何内容进入inputnum[i] - cin >> inputnum[i]表达式实际上失败并将cin置于失败状态。

因此,输入inputnum[i]字符时'.'不会更改,break永远不会被执行。

以下是一个小型完整程序中稍微修改过的代码版本,演示如何使用!cin.good()打破输入循环:

#include <iostream>
#include <ostream>

using namespace std;

int main()
{
    int inputnum[50];
    int size = 0;

    for(int i=0;i<50;i++,size++)
    {
        cin >> inputnum[i];
        if (!cin.good()) {
            break;
        }
    }

    cout << "size is " << size << endl;    
    cout << "And the results are:" << endl;

    for (int i = 0; i < size; ++i) {
        cout << "inputnum[" << i << "] == " << inputnum[i] << endl;
    }

    return 0;
}

此程序将收集inputnum[]数组中的输入,直到它达到EOF或无效输入。

答案 1 :(得分:-2)

什么是inputnum?确保t是char[] !!使用clang ++,这可以完美地编译和工作:

#include <iostream>

int main() {
  int size = 0;
  char inputnum[60];
  for(int i=0;i<50;i++,size++) {
    std::cin >> inputnum[i];
    std::cout << size;
    if(inputnum[i] == '.')  {
      break;
    }
  }
  return 0;
}

(在我的情况下输出如下:)

a
0a
1s
2d
3f
4g
5.
6Argento:Desktop marinos$ 

只要您在循环中对char测试char而不是其他内容,您的代码就可以正常接触。inputnum可能是某个整数值吗?如果是这样,那么除非inputnum匹配数字值'.'被隐式地转换为..

,否则您的test子句将始终评估为false

修改

显然你确实试图将char放入int[]。请尝试以下方法:

#include <iostream>

int main() {
  using namespace std;
  int size = 0;
  int inputnum[50];
  char inputchar[50];
  for(int i=0;i<50;i++,size++) {
    cin >> inputchar[i];
    inputnum[i] = static_cast<int>(inputchar[i]); // or inputnum[i] = (int)inputchar[i];
    cout << size << endl; // add a new line in the end
    if(inputchar[i] == '.')  break;
  }
  return 0;
}

然后,这可能是一个实验室任务,在一个真正的程序中,我永远不会像这样编码。 Tat将取决于要求,但我宁愿使用STL容器和算法或字符串流。如果被迫以较低级别的C风格工作,我会试着弄清楚什么数字'。'转换为(简单地通过int a ='。'; cout&lt;&lt; a;`)并将该数字直接放在test子句中。但是这样的代码可能很简单,但在我看来也是 BAD ,它不安全,特定于实现,而不是真正的C ++。