【发布时间】:2013-09-23 08:32:23
【问题描述】:
我正在编写一段代码以将句号后的字母大写,但由于某种原因,每次我测试它时,当我在命令提示符中输入一些内容时,程序就会在我按下回车键后停止。任何帮助将不胜感激,谢谢。我知道循环在被破坏之前是无限的,这个想法是大写过程将继续直到满足循环被破坏的条件。
if ((text.empty() != 1 ) && (text.at(text.size() - 1) != '!' ) && (text.at(text.size() - 1) != '?') && (text.at(text.size() - 1) != ':' ) && (text.at(text.size()-1 ) != ',' ) && (text.at(text.size() - 1 ) != ';' ) && (text.at(text.size() -1 ) != '=' ) && (text.at(text.size() -1 ) != '-' ) && (text.at(text.size() -1 ) != ')' ) && (text.at(text.size() -1 ) != '}' ) )
{
for (i = 0 ; i >= 0 ; i++)
{
text.append("kk") ;
if (text.find("." , j) < 0 )
{
text.erase(text.size() - 1, 2) ;
text2.append(text) ;
writer << text2 << endl ;
text2.clear() ;
j = 0 ;
break ;
}
else
{
j = text.find("." , j) + 1 ;
k = j + 1;
letter = static_cast <int> ( text.at(k) ) ;
if (( letter < 123 ) && ( letter > 96 ))
{
letter = (letter - 32) ;
(text.at(k)) = static_cast <char> (letter) ;
text.erase(text.size() - 1, 2) ;
}
else
{
text.erase(text.size() - 1, 2) ;
continue ;
}
}
}
}
else
if (text == "")
{
text2.append("\n") ;
writer << text2 << endl ;
text2.clear() ;
}
else
{
text2.append(text) ;
writer << text2 << endl ;
text2.clear() ;
}
}
【问题讨论】:
-
for (i = 0 ; i >= 0 ; i++)是你的问题。那是一个无限循环。它永远不会结束。你需要弄清楚你想要循环的究竟是什么。 -
在满足测试条件时,无限循环仍然会中断,不是吗?
-
@user2779581 是的,你说得对,这不是你的问题,但你最好写
while (true),它更具可读性,看起来不像是一个错误。 -
@jonhopkins 好吧,它可以结束,但我们正在进入 IB/UB 领域 - 滥用整数溢出通常是一件坏事
-
道歉我还是新手,但你的意思是我应该写
while (true) do {etc)来代替 for 语句,对吗?