相关疑难解决方法(0)

使用C++中的ifstream逐行读取文件

file.txt的内容是:

5 3
6 4
7 1
10 5
11 6
12 3
12 4
Run Code Online (Sandbox Code Playgroud)

5 3坐标对在哪里.如何在C++中逐行处理此数据?

我能够得到第一行,但是如何获得文件的下一行?

ifstream myfile;
myfile.open ("text.txt");
Run Code Online (Sandbox Code Playgroud)

c++ file-io ofstream

580
推荐指数
7
解决办法
126万
查看次数

为什么"while(!feof(file))"总是错的?

我看到人们最近在很多帖子中试图读取这样的文件.

#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char **argv)
{
    char *path = argc > 1 ? argv[1] : "input.txt";

    FILE *fp = fopen(path, "r");
    if( fp == NULL ) {
        perror(path);
        return EXIT_FAILURE;
    }

    while( !feof(fp) ) {  /* THIS IS WRONG */
        /* Read and process data from file… */
    }
    if( fclose(fp) == 0 ) {
        return EXIT_SUCCESS;
    } else {
        perror(path);
        return EXIT_FAILURE;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个__CODE__循环有什么问题?

c file while-loop feof

550
推荐指数
4
解决办法
21万
查看次数

从文本文件中读取,直到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万
查看次数

如何在C++中从cin读取EOF

我正在编写一个程序,直接从用户输入读取数据,并想知道我怎么能(没有循环)读取所有数据,直到标准输入EOF.我正在考虑使用,cin.get( input, '\0' )'\0'不是真正的EOF角色,只读到EOF或者'\0'以先到者为准.

或者使用循环是唯一的方法吗?如果是这样,最好的方法是什么?

c++ iostream input

75
推荐指数
6
解决办法
19万
查看次数

为什么stringstream >>在失败时改变目标值?

来自Stroustrup的TC++ PL,第3版,第21.3.3节:

如果我们尝试读入变量v并且操作失败,则v的值应该保持不变(如果v是istream或ostream成员函数处理的类型之一,则它不会改变).

以下示例似乎与上述引用相矛盾.基于上面的引用,我期待v的值保持不变 - 但它会变为零.对这种明显的矛盾行为有什么解释?

#include <iostream>
#include <sstream>

int main( )
{
    std::stringstream  ss;

    ss  << "The quick brown fox.";

    int  v = 123;

    std::cout << "Before: " << v << "\n";

    if( ss >> v )
    {
        std::cout << "Strange -- was successful at reading a word into an int!\n";
    }

    std::cout << "After: " << v << "\n";

    if( ss.rdstate() & std::stringstream::eofbit  ) std::cout << "state: eofbit\n";
    if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ state stringstream cin

53
推荐指数
1
解决办法
2598
查看次数

std :: cin如何同时返回bool和它本身?

我正在读一本关于C++的书,它说如果我使用>>运算符,它会返回运算符左侧的对象,所以在这个例子中

std::cin >> value1;
Run Code Online (Sandbox Code Playgroud)

代码返回std::cin.

但是,如果我这样做

while(std::cin >> value1)
Run Code Online (Sandbox Code Playgroud)

我的代码将处于循环中,直到出现std::cin错误,因此必须表示运算符boolstd::cin未失败时返回true,在失败时返回false std::cin.

哪一个是它?

c++ cin

32
推荐指数
2
解决办法
3079
查看次数

如何测试stringstream operator >>是否解析了错误类型并跳过它

我有兴趣讨论用于stringstream解析具有多种类型的行的方法.我将从查看以下行开始:

"2.832 1.3067 nana 1.678"
Run Code Online (Sandbox Code Playgroud)

现在让我们假设我有一个有多个strings和的长行doubles.解决这个问题的显而易见的方法是将字符串标记化,然后检查转换每个字符串.我有兴趣跳过第二步,stringstream直接使用只找到数字.

我认为解决这个问题的好方法是读取字符串并检查是否failbit已设置,如果我尝试将字符串解析为double,它将会是这样.

说我有以下代码:

string a("2.832 1.3067 nana 1.678");

 stringstream parser;
 parser.str(a);

 for (int i = 0; i < 4; ++i)
 {
     double b;
     parser >> b;
     if (parser.fail())
     {
         std::cout << "Failed!" << std::endl;
         parser.clear();
     }
     std::cout << b << std::endl;
 }
Run Code Online (Sandbox Code Playgroud)

它将打印出以下内容:

2.832
1.3067
Failed!
0
Failed!
0
Run Code Online (Sandbox Code Playgroud)

我没有惊讶它没有解析一个字符串,但内部发生了什么,以至于它无法清除它failbit并解析下一个数字?

c++ stringstream

30
推荐指数
2
解决办法
2万
查看次数

你如何用C++打开文件?

我想打开一个文件进行阅读,即C++方式.我需要能够做到:

  • 文本文件,涉及某种读取线功能.

  • 二进制文件,它提供了一种将原始数据读入char*缓冲区的方法.

c++ io file

27
推荐指数
2
解决办法
11万
查看次数

eof()不好的做法?

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

所以我使用过eof()的功能在我的很多程序,需要文件输入的,我的教授说,这是蛮好用的,但有几个人在等纷纷表示,我不应该没有真正指定的原因使用它.所以我想知道,有充分的理由吗?

c++ eof

25
推荐指数
2
解决办法
2万
查看次数

测试stream.good()或!stream.eof()读取最后一行两次

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

我有以下代码:

ifstream f("x.txt");
string line;
while (f.good()) {
  getline(f, line);
  // Use line here.
}
Run Code Online (Sandbox Code Playgroud)

但这会两次读到最后一行.为什么会发生这种情况,我该如何解决?

与以下情况非常相似:

ifstream f("x.txt");
string line;
while (!f.eof()) {
  getline(f, line);
  // Use line here.
}
Run Code Online (Sandbox Code Playgroud)

c++ iostream

17
推荐指数
2
解决办法
3万
查看次数

标签 统计

c++ ×9

iostream ×3

cin ×2

file ×2

stringstream ×2

c ×1

eof ×1

feof ×1

file-io ×1

fstream ×1

input ×1

io ×1

ofstream ×1

state ×1

while-loop ×1