如何在代码中隐含#define语句?

时间:2018-08-22 22:45:30

标签: c

首先,如何在此代码中实现#define?在定义和调用该#define时,我相当迷失。另外,如果有任何方法可以使此代码看起来更好,将不胜感激!我是编码的新手,所以任何帮助都很棒。从技术上讲这是家庭作业,但是我满足了作业的所有要求,所以现在这只是探索性的。

#include <stdio.h>
#include <math.h>

int main() {

int studentID;
int count= 0;
char course1[10]={};//issue with storing user input, used an array
char course2[10]={};
float coursecost1;
float coursecost2;
float credithour = 120.25;
float healthID=35.00;
float totalcost;

// Asks for student ID

printf("Enter the Students Id: \n");
scanf("%d",&studentID);

// Enter CRN/Credit hrs for first course

printf("Enter crn/credit hours for the first course: \n");
scanf("%s", &course1);

// Enter CRN/Credit hrs for Second Course

printf("Enter crn/credit hours for the second course: \n");
scanf("%s", &course2);

// Closing statement

printf("\nThank you!\nPRESS ANY KEY TO CONTINUE...\n\n");

// Calculates Cost of Class

int i = course1[5]-'0'; // Bad version of type casting from char to int.
int k = course2[5]-'0'; // Bad version of type casting from char to int.
coursecost1 = i*credithour;
coursecost2 = k*credithour;
totalcost= healthID+coursecost1+coursecost2;

// Printout

printf("\t\tVALENCE COMMUNITY COLLEGE\n\t\tORLANDO FL 10101\n\t\t");
do{
    count++;
    printf("*");
}while(count<26);
printf("\n\t\tFee Invoice Prepared for Student V%d\n",studentID);
printf("\t\t1 Credit Hour = %.2f\n",credithour);
printf("\t\tCRN\t    CREDIT HOURS\n");
printf("\t\t%c%c%c%c\t    %c\t\t       $ 
%.2f\n",course1[0],course1[1],course1[2],course1[3],course1[5],coursecost1);
printf("\t\t%c%c%c%c\t    %c\t\t       $ 
%.2f\n",course2[0],course2[1],course2[2],course2[3],course2[5],coursecost2);
printf("\t\t\t    Health & id fees   $  %.2f\n",healthID);
printf("\t\t");
count=0;
do{                     //could define a function to clean up code
    count++;
    printf("-");
}while (count < 39);
printf("\n\t\t\t    Total Payments     $ %.2f",totalcost);

    return 0;

1 个答案:

答案 0 :(得分:0)

“定义”基本上是为您经常在代码中编写的内容或为了测试代码而经常更改的内容创建快捷方式。

一个例子:

#define fail printf("You did something wrong")

int main (void)

{
    int number;

    printf("Insert a number between 1 and 3");
    scanf("%d", &number);

    if (number>3||number<1)
    {
        fail;
        return -1
    }
    else
    {
        printf("Insert a number between 4 and 6");
        scanf("%d", &number);
        if (number<4||number>6)
        {
            fail;
            return -1;
        }
        else return 0;
    }
}

当编译器读取该程序时,每个“失败”都将由“ printf(“您做错了什么”))代替。

这是define的主要用途,如果您现在就开始,那就是我认为重要的内容。

关于代码,当您扫描字符串时,请不要使用“&”或“ gets”功能。我可以尝试向您解释原因,但我不是这份工作的最佳人选。我的提示是,继续学习,当您开始看到指针时,您会更好地理解为什么会发生这种情况。

另外,当您使用没有起始值的数组时,不需要执行“ = {}”事情,只需在不包含“ =”的情况下调用它们即可。

现在,正如您所问的那样,这是我编写您的代码的方式,并进行了更正:

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

int main() {

    int studentID, intcount = 0; // Count is a function, better not mix things up, that's why I called it "intcount"
    char course1[10], course2[10];
    float coursecost1, coursecost2, totalcost;
    float credithour = 120.25;
    float healthID=35.00;


    // Asks for student ID

    printf("Enter the Students Id: \n");
    scanf("%d",&studentID);

    // Enter CRN/Credit hrs for first course

    printf("Enter crn/credit hours for the first course: \n");
    scanf("%s", course1);

    // Enter CRN/Credit hrs for Second Course

    printf("Enter crn/credit hours for the second course: \n");
    scanf("%s", course2);

    // Closing statement

    // printf("\nThank you!\nPRESS ANY KEY TO CONTINUE...\n\n");

    /* Decided not to delete this one, so you can
    compare this printf with the new one and the system pause */

    printf("\nThank you!\n");
    system("pause");

    // Calculates Cost of Class

    // I'm not sure what you were trying to do in these lines, so I won't touch them

    int i = course1[5]-'0';
    int k = course2[5]-'0';
    coursecost1 = i*credithour;
    coursecost2 = k*credithour;
    totalcost= healthID+coursecost1+coursecost2;

    // Printout

    printf("\t\tVALENCE COMMUNITY COLLEGE\n\t\tORLANDO FL 10101\n\t\t");
    do
    {
        intcount++;
        printf("*");
    }
    while(intcount<26);

    printf("\n\t\tFee Invoice Prepared for Student V%d\n",studentID);
    printf("\t\t1 Credit Hour = %.2f\n",credithour);
    printf("\t\tCRN\t    CREDIT HOURS\n");
    printf("\t\t%c%c%c%c\t    %c\t\t       $%.2f\n",course1[0],course1[1],course1[2],course1[3],course1[5],coursecost1);
    printf("\t\t%c%c%c%c\t    %c\t\t       $%.2f\n",course2[0],course2[1],course2[2],course2[3],course2[5],coursecost2);
    printf("\t\t\t    Health & id fees   $  %.2f\n",healthID);
    printf("\t\t");
    intcount=0;
    do
    {                     //could define a function to clean up code
        intcount++;
        printf("-");
    }
    while (intcount < 39);
    printf("\n\t\t\t    Total Payments     $ %.2f",totalcost);

} 

基本上只是避免在同一行上放置太多信息,甚至在必要时将单个printfs拆分为多个。

希望我会有所用!