C Программирование: запустить программу через цикл? - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь написать программу, которая подсчитывает ваши изменения и сообщает общую сумму.Мне удалось написать функцию для расчета изменения, но я не уверен, как заставить его работать в цикле.Еще одна вещь заключается в том, что я хочу, чтобы пользователь нажимал ввод или возвращался для выхода, когда программа запрашивает их имя, но я также не уверен, как это сделать.Это мой первый урок программирования, и я пытаюсь стать лучше.Спасибо за ваше время.

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <time.h>

float countChange(int quarters, int dimes, int nickles, int pennies);

int main(void) 
{
  int a,b,c,d;
  char yourname[20];
  printf("Your total money is $ %0.2f \n", countChange(12,23,34,45));
  printf("What is your name (Return/Enter to quit)?");
  scanf("%s", yourname);
  printf("\nHow many quarters do you have? \n" );
  scanf("%d", &a);
  printf("\nHow many dimes do you have? \n" );
  scanf("%d", &b);
  printf("\nHow many nickles do you have? \n" );
  scanf("%d", &c);
  printf("\nHow many pennies do you have? \n" );
  scanf("%d", &d);
  printf("All counted, %s has $ %0.2f\n", yourname, countChange(a,b,c,d));
  return 0;
}

float countChange(int quarters, int dimes, int nickles, int pennies)
{
  float QuartersTotal, DimesTotal, NicklesTotal, PenniesTotal, total;
  QuartersTotal= quarters*0.25;
  DimesTotal= dimes*0.10;
  NicklesTotal= nickles*0.05;
  PenniesTotal= pennies*0.01;
  total= QuartersTotal+ DimesTotal+ NicklesTotal+ PenniesTotal;
  return total;
}

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Я бы посоветовал вам использовать fgets вместо scanf для чтения строк произвольной длины, это безопаснее.(избегайте переполнения)

while (1)
{
    printf("Your total money is $ %0.2f \n", countChange(12, 23, 34, 45));
    printf("What is your name (Return/Enter to quit)?");

    fgets(yourname, sizeof(yourname), stdin);

    if (yourname[0] == '\n')
        break;

    printf("\nHow many quarters do you have? \n");
    scanf("%d", &a);
    printf("\nHow many dimes do you have? \n");
    scanf("%d", &b);
    printf("\nHow many nickles do you have? \n");
    scanf("%d", &c);
    printf("\nHow many pennies do you have? \n");
    scanf("%d", &d);
    printf("All counted, %s has $ %0.2f\n", yourname, countChange(a, b, c, d));
    getchar();
}
0 голосов
/ 23 октября 2018

Если вы хотите, чтобы программа продолжала запрашивать пользователя, вы можете просто использовать:

FILE
getline
scanf OR fscanf ...

, чтобы получить его.

Например,

FILE * prompt = stdin;
int result = 0;
while ((int)(result = getline(&line, &capacity, prompt)) != -1) {Your code here}

По сути, этот код:

1.читать со стандартного ввода

2.Читайте строку из ввода до тех пор, пока ему не будет приказано остановиться

Этот код будет выполняться вечно, если пользователь не захочет выйти или программа завершится.Он выйдет, когда будет дана команда + D или команда + C, которые являются командами уничтожения.

0 голосов
/ 22 октября 2018

Я очистил код и добавил в цикл, надеюсь, это поможет:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

float countChange(int quarters, int dimes, int nickles, int pennies)
{
    float QuartersTotal, DimesTotal, NicklesTotal, PenniesTotal, total;

    QuartersTotal= quarters*0.25;
    DimesTotal= dimes*0.10;
    NicklesTotal= nickles*0.05;
    PenniesTotal= pennies*0.01;
    total= QuartersTotal + DimesTotal + NicklesTotal + PenniesTotal;

    return total;
}

void getNumCoins(char *coinType, int *out)
{
    printf("\nHow many %s do you have?\n", coinType);
    if (scanf("%d", out) <= 0) {
        printf("Please enter a valid integer\n");
        exit(EXIT_FAILURE);
    }
}

int main(void) 
{
    int a,b,c,d;
    char yourname[20];

    while(1)
    {
        printf("Your total money is $ %0.2f \n", countChange(12,23,34,45));
        printf("What is your name (Return/Enter to quit)?");
        scanf("%s", yourname);

        if (yourname[0] == '\n') break;

        getNumCoins("quarters", &a);
        getNumCoins("dimes", &b);
        getNumCoins("nickels", &c);
        getNumCoins("pennies", &d);

        printf("All counted, %s has $ %0.2f\n", yourname, countChange(a,b,c,d));
    }
    return 0;
}

Если вы явно хотите цикл, я могу отредактировать свой ответ, чтобы показать это, но в вашем случае яне думайте, что это сделает его чище.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...