Break语句不起作用

时间:2011-08-03 05:34:37

标签: c++ break

这个程序应该在变量str_length中存储name的字符数(其中name< 50个字符以“。”结尾)我很困惑为什么这段代码只吐出第一个字符,这意味着它会破坏当i = 0时,来自循环,对于诸如“Jonathan”之类的名称。它不应该通过字符串解析,直到它找到“。”,然后才从for循环中断开?

#include <iostream>
#include <cstring>

using namespace std;

int main()
{

 string name;
 int str_length;

 cout << "What's your name" << endl;

 cin >> name;

 for (int i = 0; i < 50; i++)
 {
     cout << name[i];
     if (name[i] == '.')
        str_length = i;
        break;         
 }

 cout << endl;

 system("PAUSE");

 return 0;  
 }

3 个答案:

答案 0 :(得分:5)

你有:

for (int i = 0; i < 50; i++)
{
    cout << name[i];
    if (name[i] == '.')
       str_length = i;
       break;         
}

实际上是:

for (int i = 0; i < 50; i++)
{
    cout << name[i];

    if (name[i] == '.')
    {
       str_length = i;
    }

    break;         
}

你想:

for (int i = 0; i < 50; i++)
{
    cout << name[i];
    if (name[i] == '.')
    {
       str_length = i;
       break;  
    }       
}

你在每个循环结束时break

答案 1 :(得分:2)

您在{}条件下遗失if。因此break在没有任何条件的情况下执行,因此循环在第一次迭代中退出。

答案 2 :(得分:0)

这表明即使对于一行if语句也不使用大括号的危险。我怀疑你这样做了:

 if (name[i] == '.')
    str_length = i;

然后再添加break。如果你这样做了:

 if (name[i] == '.') { 
    str_length = i;
 }
在前面,在花括号内添加断点是很自然的,你就不会有这个错误。