for (cout << "\nEnter the Sentence now:";
cin >> Ascii;
cout << "The ascii value of each letter you entered, added to the offset factor is: "
<< (int)Ascii + RandomNumberSubtract << endl);
答案 0 :(得分:2)
可能最好的建议是不要聪明。你不仅难以让其他任何人*阅读,理解和修改你的代码,而且你冒着超越自己的风险。
因此,不要试图做一些奇怪而聪明的事情来实现你的循环。只是自然地做事。如果他们自然不符合for
或while
或do ... while
语句的结构,那么只需编写一个通用循环并使用break
处理离开循环的陈述。 e.g。
while (true) {
// Some stuff
if (i_should_break_out_of_the_loop) {
break;
}
// Some more stuff
}
这几乎总是比你用你的方式折磨for
语句更好。
一旦你有一个清晰,易于理解的循环,它应该相对容易修改它以满足你的需要。 (或者提出更清晰,更集中的问题)
*:“其他任何人”在你有足够时间留下短期记忆之后的三个星期内也会包括你。
答案 1 :(得分:0)
我强烈建议您将此循环转换为while
循环。但是,无论你是否这样做,都是如此:
只需输入EOF,循环就会终止。
如何输入EOF取决于您的操作系统(也可能取决于您的终端设置)。在Linux上(在默认终端设置下),您会在行的开头按 Ctrl + D 进行EOF。在Windows上,我认为它是 Ctrl + Z 。在Mac上我不知道。
当然你也可以重定向stdin让你的程序来自一个文件(在这种情况下,EOF是 - 正如你猜测的那样 - 在文件末尾生成),或者来自管道(在这种情况下,EOF生成为写作程序关闭管道后立即开始。
如果变量Ascii
不是char或string类型,您也可以输入一些无法解析为该变量数据类型的内容(例如,如果读取int
,其他任何其他内容比一个数字会导致流报告失败,从而循环终止)。
您还可能希望在循环体中添加另一个结束条件,然后(在for
循环中当前只是一个空语句)。例如,您可能决定百分号应该终止循环;然后你可以写(我仍然假设Ascii
的类型你没有提供char
):
cout << "\nEnter the Sentence now:";
while(cin >> Ascii)
{
cout << "The ascii value of each letter you entered, added to the offset factor is: "
<< (int)Ascii + RandomNumberSubtract << endl);
if (Ascii == '%')
break;
}
但请注意,通常operator<<
会跳过空格;我想你不想跳过空格。因此,您可能不应该operator<<
使用get
;这也允许你使用行尾作为结束条件:
cout << "\nEnter the Sentence now:";
while(std::cin.get(Ascii) && Ascii != '\n')
{
cout << "The ascii value of each letter you entered, added to the offset factor is: "
<< (int)Ascii + RandomNumberSubtract << endl);
}
然而,在这种情况下,最好一步读取该行,然后迭代它:
cout << "\nEnter the Sentence now:";
std::string line;
std::getline(std::cin, line);
for (std::string::iterator it = line.begin; it != line.end(); ++it)
{
cout << "The ascii value of each letter you entered, added to the offset factor is: "
<< (int)*it + RandomNumberSubtract << endl;
}
请注意,在C ++ 11中,您可以将其简化为
cout << "\nEnter the Sentence now:";
std::string line;
std::getline(std::cin, line);
for (auto ch: line)
{
cout << "The ascii value of each letter you entered, added to the offset factor is: "
<< (int)ch + RandomNumberSubtract << endl;
}