Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从filestream检测换行字节_C++_Newline_Text Files_Fstream - Fatal编程技术网

C++ 从filestream检测换行字节

C++ 从filestream检测换行字节,c++,newline,text-files,fstream,C++,Newline,Text Files,Fstream,我试图从一个包含组织名称(不带空格)和浮点整数的文本文件中收集信息。我想将此信息存储在数组结构中 到目前为止,我遇到的问题是收集信息。以下是文本文件的示例: CBA 12.3 4.5 7.5 2.9 4.1 TLS 3.9 1 8.6 12.8 4.9 每个组织最多可以有128个不同的数字,文本文件中最多可以有200个组织 到目前为止,我的结构是这样的: struct callCentre { char name[256]; float data[20]; }; 我的主要意见是: int ma

我试图从一个包含组织名称(不带空格)和浮点整数的文本文件中收集信息。我想将此信息存储在数组结构中

到目前为止,我遇到的问题是收集信息。以下是文本文件的示例:

CBA 12.3 4.5 7.5 2.9 4.1

TLS 3.9 1 8.6 12.8 4.9

每个组织最多可以有128个不同的数字,文本文件中最多可以有200个组织

到目前为止,我的结构是这样的:

struct callCentre
{
char name[256];
float data[20];
};
我的主要意见是:

int main()
{
callCentre aCentre[10];
getdata(aCentre);
calcdata(aCentre);
printdata(aCentre);
return 0;
}
以及getdata函数:

void getdata(callCentre aCentre[])
{
ifstream ins;
char dataset[20];

cout << "Enter the name of the data file: ";
cin >> dataset;

ins.open(dataset);

if(ins.good())
{
    while(ins.good())
    {
        ins >> aCentre[c].name;
        for(int i = 0; i < MAX; i++)
        {
            ins >> aCentre[c].data[i];
            if(ins == '\n')
                break;
        }
        c++;
    }
}
else
{
    cout << "Data files couldnt be found." << endl;
}
ins.close();
}
void getdata(呼叫中心aCentre[]
{
干扰素;
字符数据集[20];
cout>数据集;
ins.open(数据集);
if(ins.good())
{
while(ins.good())
{
ins>>中心[c]。名称;
对于(int i=0;i>中心[c]。数据[i];
如果(ins=='\n')
打破
}
C++;
}
}
其他的
{

cout>>操作符将空格视为分隔符,其中包括换行符,因此它只吃这些,而您永远看不到它们

char byte = ins.peek();

(编辑):您还需要在peek()之后检查eof,因为某些文件可能没有结束换行符


我想指出的是,您可能需要考虑使用“代码>向量\代码>而不是静态数组。如果您的输入文件长度超过了数组的容量,您将遍历整个堆栈。

您需要读取行,然后将行切成一行。下面的哈希表示了基本概念:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main() {
    string line;
    while( getline( cin, line ) ) {
        istringstream is( line );
        string cs;
        is >> cs;
        double vals[10];
        int i = 0;
        while( is >> vals[i] ) {
            i++;
        }

        cout << "CS: " << cs;
        for ( int j = 0; j < i; j++ ) {
            cout << " " << vals[j];
        }
        cout << endl;
    }
}
#包括
#包括
#包括
使用名称空间std;
int main(){
弦线;
while(getline(cin,line)){
istringstream是(行);
字符串cs;
is>>cs;
双VAL[10];
int i=0;
while(is>>vals[i]){
i++;
}

cout我会一行接一行地读取文件,并分别解析每一行的值:

std::string line;
while (std::getline(ins, line)) {
  std::istringstream sline(line);
  sline >> aCentre[c].name;
  int i = 0;
  while (sline >> aCentre[c].data[i])
    i++;
  c++;
}

这正是我想要的。谢谢。这不是真的,它会吃掉所有的东西直到空格字符,下一次当你调用它时,它会跳过空格字符直到它到达另一个空格字符。“hello there”将导致hello被吃掉,“there”仍然存在。Cont.using.peek()然后,您可以查看行中的下一个字符。@X-Istence和“eat-up”我的意思是它们被跳过了,您没有看到它们。在“hello\n there”上使用>>两次会导致“hello”和“there”,对吗?
std::string line;
while (std::getline(ins, line)) {
  std::istringstream sline(line);
  sline >> aCentre[c].name;
  int i = 0;
  while (sline >> aCentre[c].data[i])
    i++;
  c++;
}