| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 541 人关注过本帖
标题:如何在提示输入时候检查只有ENTER键按下的错误
只看楼主 加入收藏
thenboo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-5
收藏
 问题点数:0 回复次数:4 
如何在提示输入时候检查只有ENTER键按下的错误
下面代码要求在终端输入文件名,如果输入错误,则有异常提示,并要求第二次输入,直到输入正确,然后把文件里面的内容在终端显示出来。如果在提示输入文件名的时候,只按ENTER键,不按其他任何键,这当然是一种异常,但这时会让程序进入死循环,请问如何解决。

#include <iostream>
#include <fstream>
using namespace std;
int main ()
{

    char c, str[256]="";
    ifstream file;
    while(true)
    {
        
        // bitmask设置异常
        file.exceptions(ios::badbit|ios::failbit|ios::eofbit);
        cout << "Enter the name of an existing text file: " << endl;
        cin.get(str,256);
        try
        {
            file.open (str);
            cout << str << " is open for displaying content.\n";

            // 重置异常,避免读到文件最末尾时候出现的failbit 或 eofbit 异常而跳到
            // catch 代码区。windows机器上读过文件最末尾的bitmask为十进位6,也就是
            // failbit 逻辑或 eofbit,所以,新的file.exceptions不认为上述值为异常。
            file.exceptions(ios::badbit);
            while((c=file.get())!=EOF)
            {
                cout << c;
            }
            file.close();
            cout << str << " is closed.\n";
            
            // 终止循环
            break;
            }
        catch (const ios::failure& e)
        {
            cout << e.what()<<" Exception opening file"<<str<<".\n";
            
            // 清除缓冲中的new line
            cin.get();
            
            // 重新把流状态归零(goodbit),为file对象下一次获取流(stream)准备。
            file.clear();
        }

    }
    return 0;
}

[ 本帖最后由 thenboo 于 2009-9-13 14:33 编辑 ]
搜索更多相关主题的帖子: ENTER 提示 检查 输入 
2009-09-13 11:23
thenboo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-5
收藏
得分:0 
没人指导指导吗?
2009-09-13 12:30
thenboo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-5
收藏
得分:0 
我发现一个奇怪的现象,就是只按ENTER,其他什么键都不按输入的时候,cin从缓冲里的提取会失败,下一个cin从缓冲提取的时候,即便缓冲里什么也没有,终端不会要求你再次输入,这个cin将会试图从缓冲里提取,然后失败,再下一个cin出现的时候,同样终端不要求再次输入,cin再试图从缓冲提取,又失败......同所谓帝国主义的遭遇一样,捣乱,失败,再捣乱,再失败!

这同有输入的情况有点不同,输入abc,如果abc被cin从缓冲提取完了,缓冲空了,下一个cin出现的时候,会要求你再次输入的。

一旦只按enter键,会导致后续的所有cin都无法使用,这可能是导致死循环的原因吧。

期望有人能给出更详细的解答。

[ 本帖最后由 thenboo 于 2009-9-13 14:25 编辑 ]
2009-09-13 14:11
thenboo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-5
收藏
得分:0 
没人回帖?
2009-09-13 22:06
thenboo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-5
收藏
得分:0 
???
2009-09-15 00:09
快速回复:如何在提示输入时候检查只有ENTER键按下的错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025000 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved