【发布时间】:2018-01-07 15:29:26
【问题描述】:
我正在创建一个简单的应用程序来跟踪我的工作时间。用户输入他们正在做的工作的分钟数,程序将跟踪总数,直到终止。问题是在程序第一次运行之后,它会两次打印出它的第一条语句。我把它放在一个无限循环中,我对 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
【问题讨论】:
-
我猜——虽然我不能肯定——你正在读取数字后面的换行符,发现它既不是 I 也不是 T,然后转到循环的顶部。
-
将输入视为字符串,在
scanf函数上绑定一个有点正则表达式的表达式,即[^\n],然后将字符串解析为整数。 -
请注意,变量
minutesWorked与hoursWorked和totalMinutesWorked对是分开的。如果你使用更系统的名字,你会让周围的生活更轻松。可能,使用totalHoursWorked匹配totalMinutesWorked。名字对人类很重要。编译器并不担心。