C++:对循环进行故障排除
C++: troubleshooting a loop
你好。我试图执行的一段代码出现了构建问题。我是C++的新手,我正在努力了解它,所以这个问题可能很简单。我真的很感激任何能帮我一把的人。这是代码;
#include <iostream>
using namespace std;
int i = 0;
char input = ' ';
int main()
{
for(i = 1; i <= 100; ++i)
{
if((cin >> input) == 'a')
{
break;
}
}
return 0;
}
问题在于"if(((cin>>输入)=='a')"操作员"=="有问题
问题是表达式cin >> input
不会"返回"键入的字符,而是将cin
作为istream&
对象返回。
对你来说,直接的解决方案是:
if( ( cin >> input ) && ( input == 'a' ) )
{
break;
}
检查cin >> input
的原因是防御性的:如果由于任何原因istream无法读取,则它将变为无效。
需要注意的是,C++中的循环通常是基于零的,最好限制i
变量的范围:
for( int i = 0; i != 100; ++i )
表达式(cin >> input)
返回对cin的引用,并且这永远不会等于"a"。
像这样改变循环:
for(i = 1; i <= 100; ++i)
{
cin >> input;
if( input == 'a')
{
break;
}
}
尝试
for(i = 1; i <= 100; ++i)
{
cin >> input;
if(input == 'a')
{
break;
...
相反。iostream(cin)在存在时将输入存储在input中;或结束线;)
运算符>>不返回已读取的字符,而是对istream本身的引用。
你必须做:
for(i = 1; i <= 100; ++i) {
cin >> input;
if (input == 'a') {
break;
}
}
您也可以保留条件if (cin >> input)
来检查您的istream是否仍处于"良好状态",是否读取正确,但我不可能看到读取char会导致cin失败。无论如何,在所有其他必须从输入流中读取的情况下,这都是一种很好的做法。
此外,使用for(int i = 0; i < 100; ++i)
而不是for(i = 1; i <= 100; ++i)
通常更有用(例如,如果必须使用i
作为数组的索引)。还需要注意的是,您不应该在for循环之外定义i
:在C++中,尽可能地将变量范围保持在本地,这将保护您免受许多复制&粘贴错误。
只是提出了另一种检索输入数据的方法:
std::getline()允许您检索用户键入的内容,包括句子和字符串对象。因此,这种解决方案往往更灵活。
string input;
getline(cin, input);
if(input == "a")
{
break;
}
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- 针对代码::块设置的 SFML 故障排除
- 对"无效的抽象返回类型"进行故障排除
- 需要帮助对内存泄漏源进行故障排除 - C++
- 使用许多嵌套的#include语句对编译器错误进行故障排除
- 仅制作一列qtreewidget可编辑//故障排除
- 如果说明故障排除
- Ole 拖放故障排除
- 对简单 Arduino 类进行故障排除
- 强名称dll-如何进行故障排除
- C++:使用嵌套的 if/else 语句循环进行故障排除
- 对我的 c++ 程序进行故障排除
- OpenCV 3.0 源代码安装故障排除
- C++对我的命令行计算器进行故障排除
- C++:对循环进行故障排除
- 如何对CMake构建的不可复制SegFault进行故障排除
- 简单的暴力故障排除
- 故障排除delete[](损坏的未排序块)
- 故障排除_mkdir故障