Оператор Break не работает - PullRequest
       2

Оператор Break не работает

0 голосов
/ 03 августа 2011

Эта программа должна хранить количество символов имени в переменной str_length (где имя <50 символов заканчивается символом «.»). Я озадачен тем, почему этот код выплевывает только первый символ, то есть он не соответствуетцикл, когда я = 0, для имени, такого как «Джонатан».Разве он не должен анализировать строку до тех пор, пока не найдет «.», Только затем вырваться из цикла for? </p>

#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 ]

5 голосов
/ 03 августа 2011

У вас есть:

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 в концекаждый цикл.

2 голосов
/ 03 августа 2011

Вам не хватает {} вокруг if состояния. Таким образом, break выполняется без каких-либо условий, поэтому цикл завершается в самой первой итерации.

0 голосов
/ 03 августа 2011

Это демонстрирует опасность не использовать фигурные скобки даже для одной строки в операторах. Я подозреваю, что вы сделали это:

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

, а затем добавил break позже. Если вы сделали это:

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

заранее, было бы естественно добавить разрыв внутри фигурных скобок, и у вас не было бы ошибки.

...