试图更改我的代码打印方式

时间:2016-10-03 08:11:23

标签: c

我是编程新手,我正在尝试在运行时更改代码格式,运行时看起来像这样:

Enter Initial account balance: 1000

Enter  annual interest rate: 2

Enter number of years: 10
Year Daily   Weekly  Monthly Quarterly Annually
---- ------- ------- ------- --------- --------
 0 1000.00
 1 1020.26
 2 1040.92
 3 1062.01
 4 1083.52
 5 1105.47
 6 1127.86
 7 1150.71
 8 1174.02
 9 1197.80
 10 1222.07
    1000.00
     1020.53
     1041.49
     1062.87
     1084.70
     1106.97
     1129.70
     1152.89
     1176.56
     1200.72
     1225.38
       1000.00
       1021.58
       1043.63
       1066.15
       1089.16
       1112.67
       1136.68
       1161.21
       1186.28
       1211.88
       1238.03
         1000.00
         1024.90
         1050.42
         1076.58
         1103.39
         1130.87
         1159.03
         1187.89
         1217.47
         1247.79
         1278.86
           1000.00
           1040.40
           1082.43
           1126.16
           1171.66
           1218.99
           1268.24
           1319.48
           1372.79
           1428.25
           1485.95

Process returned 0 (0x0)   execution time : 4.569 s
Press any key to continue.

在查看我的代码后,我理解为什么它会像那样打印,但我希望它看起来像这样:

Year Daily   Weekly  Monthly Quarterly Annually
---- ------- ------- ------- --------- --------

  0  1000.00 1000.00 1000.00 1000.00   1000.00
  1  100x.xx 100x.xx 100x.xx 100x.xx   100x.xx
  2  10xx.xx ...

有没有办法在不改变我的代码的情况下改变打印方式?这是我的原始代码:

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

int main()
{

int c = 0;
double initial_bal, num_years;
double interest_rate;
double userVal[5];
userVal[0] = (365.0);
userVal[1] = (365/7.0);
userVal[2] = (365/30.0);
userVal[3] = (365/90.0);
userVal[4] = (365/365.0);
int i = 0;

printf("Enter Initial account balance: ");
scanf("%lf", &initial_bal);
double bal = initial_bal;

printf("\nEnter  annual interest rate: ");
scanf("%lf", &interest_rate);
interest_rate = interest_rate/100;

printf("\nEnter number of years: ");
scanf("%lf", &num_years);

printf("Year Daily   Weekly  Monthly Quarterly Annually\n"
"---- ------- ------- ------- --------- --------\n");

printf(" 0 %.2f\n", initial_bal);
i=i+1;
while (i <= num_years) {
        double new_rate = interest_rate/userVal[0];
        for (c = 0; c <= userVal[0]; c++) {
                double addVal = new_rate*initial_bal;
                initial_bal = addVal+initial_bal;
                }
        printf (" %d %.2f \n", i, initial_bal);
        i = i + 1;
        c = 0;
        }
initial_bal = bal;
i=0;
printf("    %.2f\n", initial_bal);
i=i+1;
while (i <= num_years) {
        double new_rate = interest_rate/userVal[1];
        for (c = 0; c <= userVal[1]; c++) {
                double addVal = new_rate*initial_bal;
                initial_bal = addVal+initial_bal;
                }
        printf ("     %.2f \n", initial_bal);
        i = i + 1;
        c = 0;
        }
initial_bal = bal;
i=0;
printf("       %.2f\n", initial_bal);
i=i+1;
while (i <= num_years) {
        double new_rate = interest_rate/userVal[2];
        for (c = 0; c <= userVal[2]; c++) {
                double addVal = new_rate*initial_bal;
                initial_bal = addVal+initial_bal;
                }
        printf ("       %.2f \n", initial_bal);
        i = i + 1;
        c = 0;
        }
initial_bal = bal;
i=0;
printf("         %.2f\n", initial_bal);
i=i+1;
while (i <= num_years) {
        double new_rate = interest_rate/userVal[3];
        for (c = 0; c <= userVal[3]; c++) {
                double addVal = new_rate*initial_bal;
                initial_bal = addVal+initial_bal;
                }
        printf ("         %.2f \n", initial_bal);
        i = i + 1;
        c = 0;
        }
initial_bal = bal;
i=0;
printf("           %.2f\n", initial_bal);
i=i+1;
while (i <= num_years) {
        double new_rate = interest_rate/userVal[4];
        for (c = 0; c <= userVal[4]; c++) {
                double addVal = new_rate*initial_bal;
                initial_bal = addVal+initial_bal;
                }
        printf ("           %.2f \n", initial_bal);
        i = i + 1;
        c = 0;
        }

return 0;
}

1 个答案:

答案 0 :(得分:1)

设置num_years字符串数组。将它们全部初始化为空字符串&#34;&#34;,但给它们足够大的char缓冲区,比如1​​024.然后用sprintf将printf调用替换为临时缓冲区,并在正确的字符串上调用strcat。最后将它们全部打印出来。

设置数组。

char **output;

output = malloc(num_years * sizeof(char *));
if(!output)
   /* out of memory, probably just exit */;
/* always do this for safety */
for(i=0;i<num_years;i++)
   output[i] = 0;
for(i=0;i<num_years;i++)
{
   output[i] = malloc(1024);
   if(!output[i])
     /* you're out of memory - probably just exit for now */;
   strcpy(output[i], "");
}

现在我们已经获得了容量为1024字节的num_years字符串,并初始化为空字符串。然后我们通过索引解决它们并使用strcat()构建它们。

最后,我们将它们全部打印出来,然后释放它们,不要忘记释放char **本身。