下面的程序显示了一个“int”值被同时输入和输出。但是,当我输入一个字符时,它会进入一个无限循环,显示之前输入的“int”值。如何避免输入字符?#includeusingnamespacestd;intmain(){intn;while(n!=0){cin>>n;cout 最佳答案 无限循环的原因:cin进入失败状态,这使得它忽略对它的进一步调用,直到错误标志和缓冲区被重置。cin.clear();cin.ignore(100,'\n');//100-->askscintodiscard100charactersfromtheinp
我创建了一个包含256个字符的文本文件,文本文件的第一个字符是ASCII值0,文本值的最后一个字符是ASCII值255。中间的字符从0到255均匀递增。所以字符#27是ASCII值27。字符#148应该是ASCII值148。我的目标是读取此文本文件的每个字符。我试过用cin阅读这个。我尝试了cin.get()和cin.read(),它们都应该读取未格式化的输入。但是在读取第26个字符时都失败了。我想当我使用unsignedchar时,cin说它正在读取readin255,这根本不是真的。当我使用普通签名的char时,cin表示它正在读取-1。它应该读入与ASCII26等效的任何字符。也
我试图从标准输入读取。第一行是我要阅读的行数。我接下来阅读的行将再次打印。这是代码:#includeusingnamespacestd;intmain(){intn;cin>>n;for(unsignedinti=0;i当我运行它并给出行数时,程序退出。我还没有弄清楚发生了什么,所以我决定在这里问一下。提前致谢。 最佳答案 混合格式化和未格式化的输入充满了问题。在您的特定情况下,这一行:std::cin>>n;消耗您键入的数字,但将'\n'留在输入流中。随后,这一行:cin.get(a,10);不消耗任何数据(因为输入流仍然指向'\
C++新手。在处理错误时出现正确循环的问题。我正在尝试检查用户输入是否为整数且为正数。do{cout>n;if(cin.good()){if(n当输入非整数时,循环中断。我觉得我误解了cin.clear()和cin.ignore()的固有用法以及cin在这个循环中的状态.如果我删除cin.ignore(),循环将变为无限循环。为什么是这样?我该怎么做才能使它成为一个功能优雅的循环?谢谢。 最佳答案 在您的非整数分支中,您将进一步调用cin方法,以便cin.good()重置为true。您可以将代码更改为如下内容:while(1){//
我正在完成一些关于C++的初学者练习,这让我很困惑。我可以输入一个数字,但之后没有输入字符的选项,它会跳到最后一行。我知道我可以使用cin>>符号,但我想知道为什么它不起作用。#includeusingnamespacestd;intmain(){cout>number;charsymbol;cout 最佳答案 您应该从流中删除'\n',输入数字后保留:std::cin.ignore(std::numeric_limits::max(),'\n');没有它你将阅读换行符。你可以检查:std::cout
我想知道如何使用std::cin将输入值限制为带符号的小数。 最佳答案 doublei;//Readingthevaluecin>>i;//Numericinputvalidationif(!cin.eof()){peeked=cin.peek();if(peeked==10&&cin.good()){//Good!count>discard;}}这也给出了输入-1a2.0的错误消息,避免将-1分配给i。 关于c++-如何在C++中验证数字输入,我们在StackOverflow上找到一个
据我了解,提取运算符会跳过开头的空格,并在遇到空格或流结尾时停止。noskipws可用于停止忽略前导空格。我有以下使用noskipws的程序。#includeusingnamespacestd;intmain(){charname[128];cout>noskipws>>name;cout>name;cout我的查询是:如果我输入“John”作为第一个输入,那么第二个cin>>操作不会等待输入并且不会将任何内容复制到目的地,即名称数组。我希望第二个cin>>至少传输一个换行符或流的结尾,而不是仅仅将目标字符串设置为空。为什么会这样?当我输入“JohnSmith”作为第一个cin>>语句
我正在尝试将一个简单的问题和数字检查程序编写到我的第一个C++程序中。问题是,当我输入像一二或三这样的字符串时,程序会变成无限循环,它会忽略cin函数来将生命重新分配给一个数字。cout>lives;while(lives!=1&&lives!=2&&lives!=3&&!isdigit(lives)){cout>lives;}这是我当前的代码以及您的建议:cout>lives){while(lives!=1&&lives!=2&&lives!=3){cout>lives;}} 最佳答案 #include#includeintmai
我想从用户那里读取一行整数。我不确定如何检查输入是否已结束。例如,我希望能够做类似的事情intx[MAX_SIZE];inti=0;while(cin.hasNext()){cin>>x[++i];}示例输入:214-6我怎样才能检查是否还有更多的cin可以拿走? 最佳答案 你必须做以下事情inttemp;vectorv;while(cin>>temp){v.push_back(temp);}你也可以使用检查输入结束if(cin.eof()){//endofinputreached} 关
这与:cinandgetlineskippinginput有关但他们不回答为什么会发生这种情况,只回答如何解决它。为什么cin会在缓冲区中留下一个'\n'但cin.getline会接受它?例如:cin>>foo;cin>>bar;//Noproblemcin>>baz;//Noproblem.但是使用cin.getlinecin>>foo;cin.getline(bar,100);//willtakethe'\n'那么为什么它不会发生在cin而会发生在cin.getline上呢? 最佳答案 因为,当你说getline时,你说你想得到