C++ 中断语句不工作

C++ 中断语句不工作,c++,break,C++,Break,这个程序应该将name的字符数存储在变量stru_length中(其中name

这个程序应该将name的字符数存储在变量stru_length中(其中name<50个字符以“.”结尾)。我不明白为什么这段代码只会对诸如“Jonathan”这样的名称吐出第一个字符,这意味着当I=0时它会从循环中中断。它不应该在找到“.”之前解析字符串吗,只有这样才能打破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;  
 }
#包括
#包括
使用名称空间std;
int main()
{
字符串名;
int str_长度;
姓名;
对于(int i=0;i<50;i++)
{

cout您在
if
条件周围缺少
{}
。因此
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这说明了即使对一行if语句也不使用大括号的危险。我怀疑是您这样做的:

 if (name[i] == '.')
    str_length = i;
然后在以后添加了
中断符。
。如果已执行此操作:

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

前面,在括号内加上断点是自然的,你就不会有bug。

缩进在C++中是没有意义的。你忘记了代码> {}
环绕
if
的主体。不过,您正在重新设计string的查找方法。另外
std::string
的标题是
。请参见,您不应假设输入至少为50个字符。字符串可以有任何大小,并且
大小()
method告诉你这一点。别忘了接受你得到的答案之一,编程的微妙之处……谢谢大家,这是一个非常愚蠢的错误。不是愚蠢的错误!但通过更好的实践可以避免——始终使用大括号,即使是一行,这样你的代码也很容易修改。
 if (name[i] == '.')
    str_length = i;
 if (name[i] == '.') { 
    str_length = i;
 }