Je crée une application simple pour suivre combien de temps je travaille. Un utilisateur entre la quantité de minutes de travail qu'il fait et le programme suivra le total jusqu'à la fin. Le problème est après la première exécution du programme pour imprimer sa première déclaration deux fois. Je l'ai à l'intérieur d'une boucle infinie et je n'ai pas une bonne compréhension de scanf et printf donc je pense que c'est là que réside mon échec. Toute aide serait appréciée.Pourquoi mon programme imprime-t-il deux fois la même déclaration?
C'est ce que le programme ressemble à:
#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 ----- */
Et ceci est un exemple de ce qu'il affiche:
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
Je devinerais-mais je ne suis pas du tout certain-que vous lisez le caractère de retour à la ligne après le nombre, en trouvant que ce n'est ni moi ni T, et aller au sommet de la boucle. –
traite l'entrée comme une chaîne, avec une expression légèrement regex liée à la fonction 'scanf', c'est-à-dire' [^ \ n] ', puis analyse la chaîne en entier. – t0mm13b
Notez que la variable 'minutesWorked' est séparée de la paire' hoursWorked' et 'totalMinutesWorked'. Vous rendriez la vie plus facile si vous utilisiez des noms plus systématiques. Utilisez probablement 'totalHoursWorked' pour correspondre à' totalMinutesWorked'. Les noms ont de l'importance pour les humains. le compilateur n'est pas aussi inquiet. –