这个程序应该在变量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;
}
答案 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;
}
在前面,在花括号内添加断点是很自然的,你就不会有这个错误。