我在CodeBlocksIDE中用C++编写了这段代码,但是当我运行它时,如果它没有读取数字,它不会给我-1,它会给我0。代码有问题吗?#include"iostream"usingnamespacestd;intmain(){cout>first_name>>age;//readastringfollowedbyanintegercout 最佳答案 std::basic_istream::operator>>的行为已从C++11更改。从C++11开始,Ifextractionfails,zeroiswrittentovaluean
我的兄弟最近开始学习C++。他告诉我在尝试验证简单程序中的输入时遇到的问题。他有一个文本菜单,用户在其中输入了一个整数choice,如果他们输入了无效的选项,则会要求他们再次输入它(dowhile循环)。但是,如果用户输入的是字符串而不是int,则代码将中断。我阅读了关于stackoverflow的各种问题,并告诉他按照以下方式重写代码:#includeusingnamespacestd;intmain(){inta;do{cout>a;if(cin.fail()){//Clearthefailstate.cin.clear();//Ignoretherestofthewronguse
对于学校,我们使用C++作为首选语言。我目前使用QtCreator作为IDE,它的GUI库非常棒。学校正在使用VisualStudio。但是,我们编写的大多数程序都使用cin和cout进行输入/输出。cout可以很好地作为输出,因为您可以看到它在应用程序输出中输出的内容,但是无法像在控制台上那样向cin提供它,就像VisualStudio用于其C++一样。一个例子:#include#includeusingnamespacestd;intmain(){stringname;cout>name;cout有没有办法像在VisualStudio中一样使用控制台或向cin提供输入?如果重要的话
我有以下循环。它应该读取数字直到EndOfFile,或者用户输入-999intarr[100];intindex;for(index=0;index>arr[index];if(!cin){cin.clear();index--;continue;}if(arr[index]==-999){break;}}当用户输入一个无效的东西时,比如一些char,这个循环会一直重复,而不清除错误状态或停止。 最佳答案 调用clear后,您还必须以某种方式从流中删除无效输入。这是一种方法:cin>>arr[index];if(!cin){cin.
我刚刚开始使用C++PrimerPlus学习C++,但我在使用其中一个示例时遇到了问题。就像书中指示的那样,我在末尾包含了cin.get()以防止控制台自行关闭。但是,在这种情况下,除非我添加两个我不理解的cin.get()语句,否则它仍然会自行关闭。我正在使用VisualStudioExpress2010。#includeintmain(){intcarrots;usingnamespacestd;cout>carrots;carrots=carrots+2;cout 最佳答案 cin>>carrots;此行在输入流中留下一个尾随
cin.ignore和cin.sync有什么区别? 最佳答案 cin.ignore丢弃字符,直到达到指定的数量,或直到到达分隔符(如果包括)。如果您不带参数调用它,它会丢弃输入缓冲区中的一个字符。例如,cin.ignore(80,'\n')将忽略80个字符,或者忽略它找到的所有字符,直到遇到换行为止。cin.sync丢弃输入缓冲区中的所有未读字符。但是,不能保证在每个实现中都这样做。因此,如果您想要一致性,ignore是更好的选择。cin.sync()只会清除剩下的内容。我能想到的sync()唯一不能用ignore完成的用途是sys
我一直在visualstudio2012控制台模式下处理一个C++项目,我一直在使用cin函数时遇到这个奇怪的持续性错误。在>>>下,我得到一条红线,程序告诉我没有运算符匹配这些操作数。我已经在单独的方法中初始化了所有数组元素。这是一个片段示例(实际代码包含更多变量):for(inti=0;i>allTaxiDetails[i].taxiRank;}allTaxiDetails是一个数组,数据类型为“taxiDetails”,结构如下:structtaxiDetails{stringtaxiDriverSurname;inttaxiID;inttaxiCoordinates;intnu
我正在学习C++类(class),我想知道是否有更好的方法来检查输入是否为所需类型。这样做的好方法吗?我有PHP/PERL背景,这让我很担心使用while循环。chartype;while(true){cout>type;if((type=='y')||(type=='n')){break;}}这是一种安全的方式吗?还是我怀疑我是在向一个受伤的世界敞开心扉?有什么更好的方法可以确保我在继续之前获得所需的输入? 最佳答案 就我个人而言,我会选择:do{cout>type;}while(!cin.fail()&&type!='y'&&t
我正在尝试用C++编写一个程序,以尽可能最快的方式处理大量数据包。来自标准的所有数据包都应尽可能快地读取,从池中发送到一个线程进行处理,然后处理到将数据包写入标准输出的输出线程。当您在C++中使用标准输入和输出时,建议在任何输入或输出之前调用std::ios_base::sync_with_stdio(false)功能。在某些环境中,这实现了很大的加速,但您应该避免在调用后使用标准C函数进行输入/输出。好吧,这似乎在单线程中工作得很好。但正如我所说,我的意图是使用一个线程用于输入,一个用于输出,多个线程用于并行处理。我观察到输出存在一些问题。这是输出线程(非常简化):voidPacke
我目前正在为学校创建一个主机游戏,但我在使用主菜单的GetAsyncKeyState时遇到了问题。我的主菜单在无限循环中运行,只有按下一个键才会中断。例如我有:if(GetAsyncKeyState('1')){Play();break;}仅此一项就可以正常工作。问题是,在我的Play()方法中,我有一个cin语句,并且Menu()中的“1”进入了我的Play()。我试过cin.clear()无济于事,而cin.ignore(...)阻止了从Menu()到Play()的瞬时变化。有什么办法可以防止这种情况发生吗? 最佳答案 在调用P