C++ cin对象-c++; #包括 使用名称空间std; 结构列表 { int数据; 列表*下一步; }; 列表*节点,*tail=NULL,*head=NULL; void add2list(); 无效极值(); int main() { add2list(); 极值(); 返回0; } void add2list() { int输入; cout>输入) { 节点=新列表; 节点->数据=输入; 节点->下一步=空; if(head==NULL) { 头部=节点; 尾=节点; } 其他的 { tail->next=节点; 尾=节点; } cout>x>>y; }
当我运行这个程序时,它只执行add2list函数 我添加了cin.clear(),但问题没有解决,为什么 有些人可以对我如何解决这个问题给出明确的解释 什么时候使用cin.clear()对象有用C++ cin对象-c++; #包括 使用名称空间std; 结构列表 { int数据; 列表*下一步; }; 列表*节点,*tail=NULL,*head=NULL; void add2list(); 无效极值(); int main() { add2list(); 极值(); 返回0; } void add2list() { int输入; cout>输入) { 节点=新列表; 节点->数据=输入; 节点->下一步=空; if(head==NULL) { 头部=节点; 尾=节点; } 其他的 { tail->next=节点; 尾=节点; } cout>x>>y; },c++,cin,C++,Cin,当我运行这个程序时,它只执行add2list函数 我添加了cin.clear(),但问题没有解决,为什么 有些人可以对我如何解决这个问题给出明确的解释 什么时候使用cin.clear()对象有用 抱歉,4我的英语不好您的逻辑被破坏了:cin>>input和cin>>x>>y尝试从流中提取ints。当while中的while循环add2list中断时,无法再从流中提取ints。重置错误标志不会突然发生y使可解析数据出现在流中。当您尝试读入x时,您将再次失败,原因与中断循环相同 您需要找到一种更好的
抱歉,4我的英语不好您的逻辑被破坏了:
cin>>input
和cin>>x>>y
尝试从流中提取int
s。当while
中的while
循环add2list
中断时,无法再从流中提取int
s。重置错误标志不会突然发生y使可解析数据出现在流中。当您尝试读入x
时,您将再次失败,原因与中断循环相同
您需要找到一种更好的方法来读取输入的不同部分,即一种用于构建列表,另一种用于读取更多数据。基于行的通用方法(通过
std::getline
)可能是一个很好的开始,您可以实现一个简单的shell,该shell使用“create list”之类的命令等等。有两个原因导致std::cin>>值
失败:
std::cin
已结束(例如,使用Ctrl-D或Ctrl-Z,具体取决于您使用的系统)值
,即在您的情况下为int
。但是,不会提取有问题的字符int
读取将失败,并导致设置std::ios_base::failbit
你可以对流执行任何需要清除的操作。clear()
一旦清除了std::ios\u base::failbit
你就可以ignore()
下一个字符,然后再试一次。也就是说,如果在调用后添加,请执行add2list()
假设只有一个违规字母(否则您可能需要忽略更多字符),以下两个调用应该没问题:
你怎么知道extreme没有被执行?反正它什么都没做?
#include <iostream>
using namespace std;
struct list
{
int data;
list *next;
};
list *node, *tail = NULL, *head = NULL;
void add2list();
void extrem();
int main()
{
add2list();
extrem();
return 0;
}
void add2list()
{
int input;
cout << "Adding values to list :\n";
cout << ">>";
while(cin >> input)
{
node = new list;
node->data = input;
node->next = NULL;
if (head == NULL)
{
head = node;
tail = node;
}
else
{
tail->next = node;
tail = node;
}
cout << ">>";
}
}
void extrem()
{
int x, y;
cin >> x >> y;
}
std::cin.clear();
std::cin.ignore();