Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++ 如何从文本文件c+中读取具有一定长度空格的输入字符串+;_C++ - Fatal编程技术网

C++ 如何从文本文件c+中读取具有一定长度空格的输入字符串+;

C++ 如何从文本文件c+中读取具有一定长度空格的输入字符串+;,c++,C++,我的问题是,我试图从文本文件中输入char、string和int。我知道如何使用getline()进行输入,但是在使用getline()函数之后,就不再有输入字符串后面其余整数的选项了。我的问题是,如何输入一个字符,然后输入一个字符串(带空格),后跟3个整数 data.txt看起来像这样 a New York 5 7 9 b Virginia 10 2 5 c Los Angeles 25 15 6 这是我的密码: int main()

我的问题是,我试图从文本文件中输入char、string和int。我知道如何使用getline()进行输入,但是在使用getline()函数之后,就不再有输入字符串后面其余整数的选项了。我的问题是,如何输入一个字符,然后输入一个字符串(带空格),后跟3个整数

data.txt看起来像这样

a   New York    5    7   9
b   Virginia    10   2   5
c   Los Angeles 25   15  6
这是我的密码:

   int main()
   {
    string city;
    double price;
    int amt1, amt2, amt3;
    char orderStatus;

    ifstream warehouse;
    ofstream output;
    warehouse.open("data.txt");
    output.open("dataOut.txt");

    while (warehouse.good()) 
    {
        warehouse >> orderStatus;
        output << orderStatus << "\t";

        getline(warehouse, city, '\t');
        //warehouse >> city;
        output << city << endl;

        //warehouse >> amt1;
        //output << amt1 << "\t";

        //warehouse >> amt2;
        //output << amt2 << "\t";

        //warehouse >> amt3;
        //output << amt3;
    }


    warehouse.close();
    output.close();

    return 0;
   }
intmain()
{
字符串城市;
双倍价格;
int amt1、amt2、amt3;
字符顺序状态;
ifstream仓库;
流量输出;
warehouse.open(“data.txt”);
output.open(“dataOut.txt”);
while(warehouse.good())
{
仓库>>订单状态;
输出城市;
输出amt1;
//输出amt2;
//输出amt3;

//输出一个快速的解决方法是使用(链接到文档)。这听起来像是家庭作业,所以我不想为您解决它(其中的乐趣在哪里?)但是您可以将值作为字符串拉入。如果您愿意,您也可以手动将字符一次转换为一个整数并重建数字,但是
atoi
可以处理所有这些。我猜这些是std::string,因此您必须调用它们,因为atoi只接受C字符串。

这是我对您的代码的编辑。我添加了一个de>warehouse>>noskipws>>orderStatus>>skipws;
跳过第一个制表符分隔符。另外,如果(!warehouse.good())在每次读取后都中断;,以防数据不完整。如果是C,我会执行
fscanf(文件,“%C%[^\t]s%d%d%d”,…)

#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串城市;
双倍价格;
int amt1、amt2、amt3;
字符顺序状态;
ifstream仓库;
流量输出;
warehouse.open(“data.txt”);
output.open(“dataOut.txt”);
while(warehouse.good())
{
仓库>>订单状态;
如果(!warehouse.good())中断;
输出noskipws>>订单状态>>skipws;
如果(!warehouse.good())中断;
getline(仓库,城市,'\t');
如果(!warehouse.good())中断;
输出amt1;
如果(!warehouse.good())中断;
输出amt2;
如果(!warehouse.good())中断;
输出amt3;
如果(!warehouse.good())中断;

一种输出方式是,在得到行后,将字符串标记化。同意@Mahesh。之前多次这样做。问题是,当“int”来自文本文件时,它是一个ASCII字符。这意味着它实际上是一个需要转换为int的字符/字符串。
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    string city;
    double price;
    int amt1, amt2, amt3;
    char orderStatus;

    ifstream warehouse;
    ofstream output;
    warehouse.open("data.txt");
    output.open("dataOut.txt");

    while (warehouse.good()) 
    {
        warehouse >> orderStatus; 
        if(!warehouse.good()) break;
        output << orderStatus << "\t";
        // to skip the tab delimiter
        warehouse >> noskipws >> orderStatus >> skipws;
        if(!warehouse.good()) break;

        getline(warehouse, city, '\t');
        if(!warehouse.good()) break;
        output << city << "\t";

        warehouse >> amt1;
        if(!warehouse.good()) break;
        output << amt1 << "\t";

        warehouse >> amt2;
        if(!warehouse.good()) break;
        output << amt2 << "\t";

        warehouse >> amt3;
        if(!warehouse.good()) break;
        output << amt3 << endl;
    }


    warehouse.close();
    output.close();

    return 0;
}