对于作业,我们应该从文本文档中读取日期列表和相关值(温度) . 每行中的值用逗号分隔 .
示例数据:
dd,mm,yyyy,x,y,z,w
01,01,2011,1.1,5.2,6.5,7.5
02,01,2011,2.1,5.2,6.1,1.1
03,01,2011,4.5,2.5,6.1,2.1
...
30,01,2011,4.1,6.1,6.1,2.1
01,02,2011,2.5,6.1,7.1,6.3
到目前为止,我已经实现了一个循环来读取每一行:
while(scanf("%d,%d,%d,%f,%f,%f,%f", &dd, &mm, &yyyy, &x, &y, &z, &w) == 7)
{
}
我们假设文档中没有错误,没有重复日期 .
但是,可能缺少条目(不是每个月都有完整的数据;缺少天数) .
我无法检测每个月的数据(mm)是完整月份还是仅部分月份 .
例如:2011年3月31天 . 如果我从3月份开始有31个参赛作品,我需要打印“完整月份”,否则如果缺少日期我必须打印“部分月份” .
到目前为止,我一直在使用 if(mm==1){}
语句将 while(scanf(...))
循环中的每个月分开,然后在单独的变量中递增它们,然后将它与整月的天数进行比较,但我不知道如何实现它以便它检测到该mm已从上一行(新月)更改并执行某项操作(例如:计算)
对不起,如果这令人困惑!
我们还没有教过数组,只有操作,循环和函数 .
3 回答
在某处保持上个月的 Value ;完成月度相关计算并在您阅读的月份高于上个月时重置月度计数器
首先,我不认为你想要不同月份的“单独变量” . 为什么不是按月索引的数组(即mm)?这可能会使您的代码长度减少一个数量级 . 哦,你还没有被教过阵列 .
其次,在循环的顶部设置'last_mm'变量 . 这将是您上次循环时的mm值 . 将其初始化为-1或其他内容 . 当last_mm和mm不同时,您知道月份已更改 . 在循环的底部,将last_mm设置为mm .
通常,这是在循环期间检测更改的方法 .
以下代码未经测试,但是这样的事情应该可以为您提供没有数组的技巧 . 我希望你知道开关/箱子 .