我是编程的新手,今天我来到这里是因为我需要帮助进行一项我想要解决的简单练习。练习由各个小部分组成:
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对象。你能解决这个问题吗?为什么会出现此错误?谢谢
答案 0 :(得分:2)
这里有很多东西都不行。
首先,你没有初始化Point,所以它有一些随机数据。 随机数据不是那么随机,因为在循环中内存分配总是相同的,因此变量将具有最后一个循环的数据。
如果第一个字符不是'(' 所以你跳出那里而不设置p.x和p.y。
函数skip_to_character(...)是另一件不好的事情,除了难以阅读和使用for循环的非常糟糕的方法之外,当没有'C'时你输入“9,99)”所以我猜这里你得到“无输入”输出。
现在到你主要的for循环: 以下是发生的事情:
如果你不相信我p中没有数据。尝试用0或其他东西初始化它并检查输出:
Point p = {0,0};