c++中输入输出流的问题

#include <iostream>
using namespace std;
void main()
{
int i;
char s[7];
cin>>i;
cin>>s;
}

很简单的一段程序,我想知道如果在输入i的时候不小心输入了一个字符串。那么s就自动会被赋值成那个字符串。。有没有办法避免呢?

有的,有这样的几个系统函数
isalnum 判断一个字符是否是字符类的数字或者字母
isalpha 判断一个字符是否是字母
isblank 判断一个字符是空白字符(空格和水平制表符Tab)
iscntrl 判断一个控制符(ascii码0-31之间的字符)
isdigit 判断一个字符是否是字符类的数字
isgraph 判断一个字符是否是可打印字符(ascii码33-126之间的字符)
islower 判断一个字符是否是小写字母
isprint 判断一个字符是否是包含空格在内的可打印字符(ascii码32-126之间的字符)
ispunct 判断一个字符是否是除空格,字母,数字外的标点符号
isspace 判断一个字符是空白字符(空格,换行符(\n),走纸符(\f),回车符(\r),垂直制表符(\v),水平制表符(\t))
isupper 判断一个字符是否是大写字母
isxdigit 判断一个字符是否是一个十六进制的数字
tolower 将大些字符转换为小写
toupper 将小写字符转换为大写
isalnum()函数的作用是判断一个字符是否是字符类的数字或者字母:
#include <ctype.h>这个是他们的头文件
希望对你有所帮助
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-29
可以,因为cin执行的操作时从输入缓冲区读入一个东西。这个时候如果在S前面有东西,当然就不能读到这个字符。你可以在“cin>>i;
”后面加一个函数“getch(word)”从缓冲区把你不需要的那个字符拿走,就可以了。这个方法很多地方都用得上。不过函数我可能记得不对。
第2个回答  2010-04-29
我运行了一下你写的程序,你写的不会将那个字符串赋值给s,在进行i输入的时候,类型不匹配,cin就被关闭了,i和s都没有值,不过i有一个系统默认值。我是这样改了一下。
#include <iostream>
using namespace std;
void main()
{
int i;
char s[7];
cin>>i;
cin.clear();
cin>>s;
cout<<i<<endl;
cout<<s<<endl;
}

在输入i的时候,类型不匹配,cin的一些状态位被设置,cin就被关闭了,你所输入的内容也保留在了内存了,也不会赋值给s,因为 cin>>s得时候,cin还是被关闭的,所以要想赋值就要重新打开cin,很简单,就一条语句, cin.clear()。这句话的意思是由于 cin>>i出错,cin的状态被设置(即意味着不能在进行输入),而cin.clear()就把所有状态位清楚(意思是就可以输入了)。

但一般安全起见会这样写
#include <iostream>
using namespace std;
void main()
{
int i;
char s[7];
while(!(cin>>i))//直到输入正确为止
{
cin.clear();//输入不正确,就清除位,以便重新输入
while (cin.get()!='\n')//抛弃内存里面剩下的数据
{
continue;
}

}
// cin.clear();
while(!(cin>>s))//直到输入正确为止
{
cin.clear();//输入不正确,就清除位,以便重新输入
while (cin.get()!='\n')//抛弃内存里面剩下的数据
{
continue;
}

}
cout<<i<<endl;
cout<<s<<endl;
}
第3个回答  2010-04-29
加个判断语句吧

在cin >> i;后面加上个判断语句

while (!cin)
{
cin.clear();
while (cin.get()!='\n')
{
continue;
}
cout << "输入类型错误,请重新输入";
cin >> i;
}
相似回答