读TXT文件时末尾多个换行符问题

使用getline()读txt文件的时候,不注意会出现点小bug。

贴代码:

#include<iostream>
#include<string.h>
#include<fstream>
#include<sstream>
using namespace std;
int main()
{
    ifstream in("aaa.txt");
    string s;
    int i = 0;
    while (getline(in, s))
    {
        cout << s;
        const char *p = s.c_str();
        if (*p==‘\0‘)
            break;
        i++;
    }
    cout << endl;
    cout << i;
    return 0;
}

getline()的特征呢,就是碰到个‘\n‘就会认为这是一行的结束,结果将前面的数据存为一个string对象。

使用c_str()方法可将string对象转换为const char*类型的C字符串,会在其数据后面补上一个‘\0’。

人为的在txt文件后按多次换行将会导致多次读入空的string对象,即while中的i会多累加几次。

所以添加了个判断,及时跳出。末尾多次的换行造成了文件结束位置的不确定性。

时间: 2024-08-07 23:18:13

读TXT文件时末尾多个换行符问题的相关文章

JTextArea内容保存到txt文件上,如何实现换行

解决办法: 如果是采用流的方式一行一行写到文件中,可以把FileWriter换为PrintWriter,然后调用PrintWriter的println()方法. byte fileContent[] = getJTextArea().getText().replaceAll("\n", "\r\n").getBytes();//此处主要是为了在Windows中实现换行操作 FileWriter fw=new FileWriter(file); String str=

C#读txt文件并写入二维数组中(txt数据行,列未知)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace 二维数组 { class Program { static void Main(string[] args) { int row = 0;//行 int col = 0;//lie FileStream fs; string path = @"C:\Documents an

R读 txt 文件

house<-read.table("house_data.txt", header = TRUE, sep='|',fileEncoding ='UTF-8') id|house_customized_id|community_id|community_name|house_area|house_structure|house_floor|house_total|house_avg|house_tag|agency_name6328500962692431872|3232_77

读Txt文件

System.IO.StreamReader m_streader; InteropPermission m_Perm = new InteropPermission(InteropKind::ClrInterop); Notes m_Notes; str s; int i=0; container c; ; m_Perm.assert(); m_streader = new System.IO.StreamReader(@"C:\\Test.txt"); while(int642in

编写一个程序, 将 a.txt 文件中的单词与 b.txt 文件中的 单词交替合并到 c.txt 文件中, a.txt 文件中的单词用回车符 分隔, b.txt 文件中用回车或空格进行分隔。

package cn.itcast; import java.io.File; import java.io.FileReader; import java.io.FileWriter; public class MainClass{ public static void main(String[] args) throws Exception{ FileManager a = new FileManager("a.txt",new char[]{'\n'}); FileManager

编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔

1 package sundemo2; 2 3 import java.io.File; 4 import java.io.FileReader; 5 import java.io.FileWriter; 6 7 public class MainClass{ 8 public static void main(String[] args) throws Exception{ 9 FileManager a = new FileManager("E:\\WorkSpace\\SunDemo\\d

编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件中,a.txt 文件中的单词用回车符分隔,b.txt 文件中用回车或空格进行分隔。

import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.PrintWriter; public class A { public static void main(String[] args) throws Exception { FileManage a = new FileManage("src/main/resources/

windows下修改文件时的换行符引起在linux运行不正常的解决

env: /etc/init.d/nginx: No such file or directory 原因:在windows下修改文件的时候换行符出的问题. windows和linux下的换行符是不同的.一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在linux上运行就生成LF格式换行的文本文件. 在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题, 特别是在编辑程序代码时. 有时候代码在编辑器中显示正常,

[matlab]改变矩阵的大小并保存到txt文件

要完成的任务是,加载一个保存在txt文件中的矩阵, 并把它扩大10倍,并且要再次保存回去 %加载txt文件 >load('Matrix.txt'); %扩大10倍 repmat(Matrix,row column) % 这里的matrix 参数是要对其进行修改的matrix, 其中row是要新建的一个矩阵的行数, 而column是新建矩阵的列数 >Matrix = repmat(Matrix,10,1); % 这个就相当于  将Matrix矩阵 复制了10份,并且是按列排列的, 等同于 Mat