结构中的整数,字符和浮点数

时间:2017-04-13 22:22:59

标签: c++

所以,我的c ++代码存在一些问题。我有以下代码,但到目前为止,我无法将大部分数据存储到结构化数据类型中。

cout << setprecision(2) << fixed << showpoint;

ofstream salesFile ("Sales.txt");
ifstream stockFile ("Stock.txt");
for (counter = 0; counter < 9; counter++)
{
    stockFile >> instock[counter].itemCode;
    stockFile.getline (instock[counter].description, 20);
    stockFile >> instock[counter].price;
}

然后get代码看起来像这样。

<button type="button" class="button" onclick="comboChart()">Combo Chart</button>

输出应该看起来像:

  

1234“这里的描述”999.99                   数量X

这就是输出:

  

1234 0.00                    数量5

1 个答案:

答案 0 :(得分:1)

如果您的文件格式为(一个条目)

1234
description here
999.99

(跨多行)然后解释很简单

读取循环中的代码,

stockFile >> instock[counter].itemCode;
stockFile.getline (instock[counter].description, 20);
stockFile >> instock[counter].price;

将按此顺序工作

  1. instock[counter].itemCode的值将获得值1234。但是(理解这一点很重要) 1234之后的换行符仍然会在流中等待读取
  2. getline()的来电将遇到换行符,并立即返回。 instock[counter].description将包含字符串""
  3. 表达式stockFile >> instock[counter].price将在说明中遇到d。这不能解释为整数值,因此instock[counter].price将保持不变。
  4. 假设某些前面的代码(您尚未显示)将instock[counter].price设置为999.99,则上述事件序列将解释您的输出。

    真正的问题是你在一个流上混合输入样式。在这种情况下,将流操作符>>的使用与使用面向行的输入(getline())混合使用。根据我对上述序列的描述,不同的输入样式以不同的方式交互,因为(在这种情况下)它们在遇到换行符时表现不同。

    有些人会在阅读instock[counter].itemCode后告诉您跳过换行符。这个建议是有缺陷的,因为它不能很好地应对变化(例如,如果文件格式改变为在另一条线上包含一个额外的字段会发生什么?如果文件不是&#34;那么会发生什么? #34;出于某种原因的预期格式?)。

    更通用的解决方案是避免在一个流上混合输入样式。一种常见的方法是使用getline()来读取流中的所有数据(即不使用>>直接与stockFile进行交互)。然后解释/解析每个字符串以找到所需的信息。

    顺便说一句,不是使用char数组来保存字符串,而是尝试使用标准std::string(来自标准标题<string>)。这具有以下优点:std::string可以根据需要调整其长度。 std::getline()也有一个可以愉快地读到std::string的重载。一旦数据从您的流中读取为std::string,就可以根据需要对其进行解释。

    解释字符串的方法有很多种(例如从中提取整数值)。作为一项练习,我会为此找到一种方法 - 您将通过自己动手学习更多知识。