for循环不更新struct对象

时间:2015-11-20 15:39:50

标签: c++ for-loop struct format

我是编程的新手,今天我来到这里是因为我需要帮助进行一项我想要解决的简单练习。练习由各个小部分组成:

1)使用两个x和y坐标(double)定义一个名为Point的结构。

2)提示用户输入7(x,y)对。

3)当我们阅读这些对时,我们必须将它们存储在一个名为original_points的点向量中。

所以这是我的第一次尝试:

DECLARE @FFYStartMonth INT = 10 --The first month of the FFY
DECLARE @EntryDate DATETIME = '4/1/2015' --The date of the data
DECLARE @StartDate DATETIME

DECLARE @EndDate DATETIME

SET @StartDate = DATEADD(dd, 0,
    DATEDIFF(dd, 0,
        DATEADD(mm, - (((12 + DATEPART(m, @EntryDate)) - @FFYStartMonth)%12), @EntryDate) -
datePart(d,DATEADD(mm, - (((12 + DATEPART(m, @EntryDate)) - @FFYStartMonth )%12),
    @EntryDate )) + 1 ))  

SET @EndDate = DATEADD(SS, -1, DATEADD(mm, 12, @StartDate))

SELECT @StartDate, @EndDate

如果发生简单的格式错误,我尝试通过跳过每个字符来恢复,直到程序达到'('。我的问题是,如果我尝试输入错误的输入格式,如:9,99)代码将push_back()错误发生后的第一个正确读数以及错误发生前的第一个正确读数。例如,如果我尝试输入这样的数据:

(1,2)

9,99)

(5,6)

我的向量中将包含三个元素:(1,2),(1,2)和(5,6)。看起来当我在每个条件检查后进入循环时,P的值保持不变,而不是为每次迭代创建一个新的Point对象。你能解决这个问题吗?为什么会出现此错误?谢谢

1 个答案:

答案 0 :(得分:2)

这里有很多东西都不行。

首先,你没有初始化Point,所以它有一些随机数据。 随机数据不是那么随机,因为在循环中内存分配总是相同的,因此变量将具有最后一个循环的数据。

如果第一个字符不是'(' 所以你跳出那里而不设置p.x和p.y。

函数skip_to_character(...)是另一件不好的事情,除了难以阅读和使用for循环的非常糟糕的方法之外,当没有'C'时你输入“9,99)”所以我猜这里你得到“无输入”输出。

现在到你主要的for循环: 以下是发生的事情:

  1. 您创建了一个Point p而没有初始化它
  2. 您读取的垃圾流不会被设置
  3. 你跳过垃圾
  4. 你将未初始化的Point p推入向量
  5. 如果你不相信我p中没有数据。尝试用0或其他东西初始化它并检查输出:

    Point p = {0,0};