草庐IT

c++ - 使用 cin 丢弃数字以外的字母

我现在有这个循环,它读取数字并以十进制、八进制和十六进制输出它们:while(1){if(cin>>n)cout但是,如果我尝试丢弃不是数字的输入,它不会在字母后读取输入:if(cin.fail()){cin.ignore();}如何丢弃输入但稍后能够读取其他输入?示例输入:23678786abc7777预期输出:十进制、十进制、十六进制23271767812462A678614223127777171411E61 最佳答案 您需要使用cin中的违规内容并重置错误状态。只要设置了failbit,所有输入操作都会立即失败。while(

c++ - while (std::cin >> value) 如何工作?

在C++Primer中给出的示例中,#includeusingnamespacestd;intmain(){intsum=0,value=0;while(std::cin>>value){sum+=value;//equivalenttosum=sum+value}std::cout(std::cin>>value)如何返回true?什么是“文件结尾”?看来我必须理解该术语才能理解我的主要问题。谢谢! 最佳答案 overloadedoperator>>function返回对流本身的引用,流有anoverloadedoperator这

c++ - C++ 中的 cin 试图将字符串值分配给 int 变量?

我正在阅读BjarneStroustrup的编程-使用C++的原理和实践,并得出以下示例:#include"std_lib_facilities.h"intmain(){/*NameandAgeinput*/cout>first_name>>age;cout如果您运行该程序并输入Carlos22,它将正确输出Hello,Carlos(age22)。但是,如果你输入22Carlos,他说输出应该是Hello,22(age-1)因为“Carlos不是整数......它不会被读取”。但是,当我运行它时,它返回Hello,22(age0),这似乎是在为其分配垃圾值。我很好奇为什么会这样,因为这

C++ 输入运算符重载 ">>"

我有一个有理数类,它由两个整数组成:num,分母和den,分母。下面的运算符应该从流中读取有理数。istream&operator>>(istream&Is,rational&r){charc;//Testchar.doublen;//Couldbeeitherthenumeratorofthefractionortheantiperiodoftherepeatingdecimalnumber.Is>>n;inti=0;for(;n*10-pow(10,i+1)>ws;c=Is.peek();if(c=='/'){c=Is.get();Is>>r.den;}else{r.den=1;}

c++ - 如何将 cin 或 ifstream 对象作为参数函数传递

虽然这会起作用,因为ifstream继承自istreamstringgetFileContents(istream&file_contents){stringresult;stringline;while(getline(file_contents,line))result+=line+"\n";returnresult;}然后我想这样调用这个函数:ifstreamfile_input;getFileContents(file_input);...getFileContents(cin);但是我在visualstudio中得到这个错误:“getFileContents”:无法将参数1从

cin失去了每行的前几个字符

我见过其他人报告这个问题cin.ignore()和getline()。我了解这是一些涉及新线的问题,但是我不确定如何使用>>。我正在尝试实施一本以学生名的名称和测试成绩的成绩,并输出其名称(最终是课程等级)[从加速C++]。不过,我什至无法正确输出名称。//Student.cpp#include"Student.h"#include#includeistream&read(istream&in,Student&s){in>>s.name>>s.midterm;read_hw(in,s.homework);returnin;}istream&read_hw(istream&in,ve

c++ - std::cin 上的 std::getline

是否有充分的理由:std::stringinput;std::getline(std::cin,input);getline调用不会等待用户输入?cin的状态是否以某种方式搞砸了? 最佳答案 很可能您在读取一些其他数据后尝试读取字符串,例如int。考虑输入:11isaprime如果你使用下面的代码:std::cin>>number;std::getline(std::cin,input)getline只会读取11之后的换行符,因此您会觉得它没有等待用户输入。解决这个问题的方法是使用虚拟getline来消耗数字后的新行。

c++ - 使用 std::cin 忽略/跳过标记

使用scanf可以跳过匹配的标记,只需将*添加到模式中,如:intfirst,second;scanf("%d%*s%d",&first,&second);是否有与std::cin等效的方法?类似的东西(当然,不使用额外的变量):intfirst,second;std::cin>>first>>`std::skip`>>second; 最佳答案 C++中的输入流做同样的事情并不是一项简单的任务。函数scanf获取所有预期格式:"%d%*s%d"并且可以向前看以确定发生了什么。另一方面,operator>>>只是试图满足当前入口参数。

c++ - cin.get() 不工作

我今天写了这个简单的程序,但我发现cin.get()拒绝工作,除非有2个。有什么想法吗?#includeusingnamespacestd;intmain(){intbase;while((base36)){cout>base;}stringbase_str="0123456789abcdefghijklmnopqrstuvwxyz";for(inti=0;i如果我将cin.get()移动到嵌套循环之前,循环运行然后暂停。如果我取出一个cin.get(),程序就会结束。我正在使用最新版本的bloodshedc++dev 最佳答案 你

c++ - 差异 : cin. getline() 和 getline(cin, st)

哪个更好,更受欢迎?我真的发现阅读API令人困惑。 最佳答案 成员(member)版读入char*,免费版读入std::string。所以更喜欢免费版!像这样使用它:std::istream&ins=/*...*/;std::stringline;while(std::getline(ins,line)){//processline} 关于c++-差异:cin.getline()和getline(cin,st),我们在StackOverflow上找到一个类似的问题: