我正在創建一個簡單的應用程序來跟蹤我工作的時間。用戶輸入他們正在進行的工作分鐘數量,程序將跟蹤總數,直到終止。問題出現在程序第一次運行後,打印出第一條語句兩次。我在一個無限循環內部完成了它,並且我對scanf和printf沒有很好的掌握,所以我認爲這是我的失敗所在。任何幫助,將不勝感激。爲什麼我的程序打印兩次相同的語句?
這是程序的樣子:
#include <stdlib.h>
#include <stdio.h>
void logic(int *minutesWorked, int *hoursWorked, int *totalMinutesWorked);
int main(void)
{
int minutesWorked = 0;
int hoursWorked = 0;
char letter = 0;
int totalMinutesWorked = 0;
while (1) {
printf("Enter I for input or T for total\n");
scanf("%c", &letter);
if (letter == 'i' || letter == 'I') {
printf("Please enter minutes worked\n");
scanf("%d", &minutesWorked);
logic(&minutesWorked, &hoursWorked, &totalMinutesWorked);
}
else if (letter == 't' || letter == 'T') {
printf("Hours worked is %d and minutes worked is %d\n", hoursWorked,totalMinutesWorked);
}
}
return EXIT_SUCCESS;
} /* ---------- end of function main ---------- */
void logic(int *minutesWorked, int *hoursWorked, int *totalMinutesWorked)
{
*totalMinutesWorked += *minutesWorked;
if (*totalMinutesWorked >= 60) {
*hoursWorked += *totalMinutesWorked/60;
*totalMinutesWorked = *totalMinutesWorked % 60;
}
} /* ----- end of function logic ----- */
這是它所顯示的內容示例:
Enter I for input or T for total
I
Please enter minutes worked
100
Enter I for input or T for total
Enter I for input or T for total
I
Please enter minutes worked
33
Enter I for input or T for total
Enter I for input or T for total
T
Hours worked is 2 and minutes worked is 13
Enter I for input or T for total
Enter I for input or T for total
我猜 - 雖然絕不是我確定 - 你正在讀取數字後面的換行符,發現它既不是我也不是T,並且進入循環的頂部。 –
將輸入視爲一個字符串,將一些有些正則表達式綁定到'scanf'函數,即'[^ \ n]',然後將該字符串解析爲一個整數。 – t0mm13b
請注意,變量'minutesWorked'與'hoursWorked'和'totalMinutesWorked'對分開。如果你使用更系統的名字,你會讓生活更輕鬆。可能使用'totalHoursWorked'來匹配'totalMinutesWorked'。名字對人類很重要;編譯器並不擔心。 –