相关疑难解决方法(0)

为什么循环条件中的iostream :: eof被认为是错误的?

我刚刚在这个答案中发现了一条评论说iostream::eof在循环条件下使用"几乎肯定是错误的".我通常使用类似的东西while(cin>>n)- 我猜是隐式检查EOF,为什么检查eof显式使用while (!cin.eof())错误?

它与scanf("...",...)!=EOF在C中使用有何不同(我经常使用没有问题)?

c++ iostream c++-faq

564
推荐指数
5
解决办法
6万
查看次数

从文本文件中读取,直到EOF重复最后一行

以下C++代码使用ifstream对象从文本文件(每行有一个数字)读取整数,直到它达到EOF.为什么它读取最后一行的整数两次?如何解决这个问题?

码:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream iFile("input.txt");    // input.txt has integers, one per line

    while (!iFile.eof())
    {
        int x;
        iFile >> x;
        cerr << x << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

input.txt:

10  
20  
30
Run Code Online (Sandbox Code Playgroud)

输出:

10  
20  
30  
30
Run Code Online (Sandbox Code Playgroud)

注意:我已跳过所有错误检查代码,以使代码段保持较小.在Windows(Visual C++),cygwin(gcc)和Linux(gcc)上可以看到上述行为.

c++ fstream iostream

117
推荐指数
5
解决办法
27万
查看次数

ifstream的eof()如何工作?

#include <iostream>
#include <fstream>

int main() {
    std::fstream inf( "ex.txt", std::ios::in );
    while( !inf.eof() ) {
        std::cout << inf.get() << "\n";
    }
    inf.close();
    inf.clear();
    inf.open( "ex.txt", std::ios::in );
    char c;
    while( inf >> c ) {
        std::cout << c << "\n";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我真的很困惑eof()功能.假设我的ex.txt的内容是:

abc
Run Code Online (Sandbox Code Playgroud)

它总是读取一个额外的字符,并-1在阅读时显示eof().但是inf >> c给出了'abc'的正确输出?任何人都可以帮我解释一下吗?

c++ ifstream eof

40
推荐指数
3
解决办法
13万
查看次数

读取超过127个ASCII值时,C++ cin失败

我创建了一个包含256个字符的文本文件,文本文件的第一个字符是ASCII值0,文本值的最后一个字符是ASCII值255.两者之间的字符均匀地从0到255递增.因此字符#27是ASCII值27.字符#148应该是ASCII值148.

我的目标是阅读此文本文件的每个字符.

我试过读这个cin.我试过cin.get()cin.read(),这两者都应该读无格式输入.但是在阅读第26个角色时都失败了.我想当我用过时unsigned char,cin说它是读书255,这根本不是真的.当我使用普通签名时char,cin表示正在阅读-1.无论ASCII的等价字符26是什么,都应该读取.或许cin认为它受到了打击EOF?但我之前阅读过单独的StackOverflow帖子,这些帖子EOF不是一个可以写的实际角色.所以我迷失了为什么cin咳嗽表示整数-1或整数的字符值255.有人可以告诉我我做错了什么,为什么,最好的解决方案是什么,为什么?

粘贴的具体代码不多.我已经尝试了一些不同的非工作组合都涉及要么cin.get()cin.read()与任一charunsigned char和呼叫强制转换为charint之间.我没有运气能够读过第26个角色,除此之外:

unsigned char character;

while ( (character = (unsigned char)cin.get()) != EOF) { ... }
Run Code Online (Sandbox Code Playgroud)

虽然有趣的是,虽然这并没有阻止我在第26个字符的while循环,但它也不会继续前进.看起来cin,它是否cin.get()还是cin.read()只是拒绝前进到下一个字符检测的东西它不喜欢的时刻.我也知道cin.ignore()存在类似的东西,但我的输入是不可预测的; 也就是说,我的文本文件的这256个字符只是一个测试用例,真正的输入是相当随机的.这是较大的家庭作业的一部分,但这个具体问题与作业无关; 我只是坚持了部分流程.

注意:我正在读取标准输入流,而不是特定的文本文件.似乎仍然没有直接的解决方案.我无法相信以前没有这样做过cin …

c++ cin character-encoding

6
推荐指数
2
解决办法
2766
查看次数

标签 统计

c++ ×4

iostream ×2

c++-faq ×1

character-encoding ×1

cin ×1

eof ×1

fstream ×1

ifstream ×1