我無法一起迭代兩個值。我正在撰寫一個程式,在該程式中,我需要從輸入的任何年份開始,為接下來的 20 年中的每一年找到一個特定的假期,并且我目前無法查看給定年份的指定日期。我嘗試在 while 回圈中使用 while 回圈,但它對我不起作用。
當前代碼
#include <stdio.h>
#define SIZE 1000
int main() {
// update date opposite of year so go through all the days first then the year
// while loop that checks if the date was on a monday and gets all the mondays from the month then checks the second last one
int d = 15, m = 5, y, future, day, month, year, i = 0;
char dates[SIZE];
printf("Enter a year: ");
scanf("%d", &y);
future = y 20;
while (15 <= d && d < 25 && y <= future) {
printf("\nDay: %d and Year: %d\n", d, y);
d ;
y ;
// day = d;
// printf("\nDay: %d and Year: %d\n",day,year);
// while(y <= future){
// printf("year: %d\n", y);
//check dates in year from previous while loop
// y ;
// year = y;
// printf("\nDay: %d and Year: %d\n",day,year);
// }
}
return 0;
}
這里的代碼是兩個條件都在一個 while 回圈中的地方,我嘗試將年份 (y) 條件移動到第一個 while 回圈中的另一個 while 回圈,但無濟于事。
電流輸入和輸出
Enter a year: 2015
Day: 15 and Year: 2015
Day: 16 and Year: 2016
Day: 17 and Year: 2017
Day: 18 and Year: 2018
Day: 19 and Year: 2019
Day: 20 and Year: 2020
Day: 21 and Year: 2021
Day: 22 and Year: 2022
Day: 23 and Year: 2023
Day: 24 and Year: 2024
期望輸出
Day: 15 and Year: 2015
Day: 16 and Year: 2015
Day 17: and Year: 2015
Day...24 and Year...2035
因此,該程式應在輸入年份之后的 20 年內從第 15 天到第 24 天計算,但目前僅計算到 2024 年的一天。
uj5u.com熱心網友回復:
它應該是嵌套回圈。外回圈迭代數年,內回圈迭代數天。
使用for比撰寫更簡單while。
for (int year = y; year <= y 20; year ) {
for (int day = 15; day <= 24; day ) {
printf("\nDay: %d and Year: %d\n",day,year);
}
}
但如果您while出于學術原因必須使用,只需轉換它們:
int year = y;
while (year <= y 20) {
int day = 15;
while (day <= 24) {
printf("\nDay: %d and Year: %d\n",day,year);
day ;
}
year ;
}
uj5u.com熱心網友回復:
為了建立在@Barmar 的出色答案的基礎上,我們可以通過抽象出日子的回圈來消除內部回圈并在單個回圈中執行此操作。
為此,我們創建了一個結構體cycle,該結構體將保存有關如何在一個范圍內回圈的所有相關資訊:
- 范圍的開始。
- 范圍的結束。
- 當前值。
typedef struct cycle {
int start;
int end;
int cur;
} cycle;
現在,我們可以創建一個advance以 acycle和 int 遞增的函式。如果以該值遞增回圈將超過范圍的末尾,我們將當前值設定為回圈的開始。否則我們只是增加它。
void advance(cycle *c, int inc_by) {
if (c->cur inc_by > c->end) {
c->cur = c->start;
}
else {
c->cur = inc_by;
}
}
現在,在該main函式中,我們可以創建一個表示您要回圈的天數的范圍,for 回圈的更新可以將回圈提前一天。
因此,帶有日期和年份的硬編碼值的程式的簡單版本如下所示。
int main() {
cycle days = {.start = 15, .end = 24, .cur = 15 };
for (int year = 2000; year <= 2020; year , advance(&days, 1)) {
printf("\nDay: %d and Year: %d\n", days.cur, year);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312868.html
