c - 使用 2 条 switch 语句打印输出

标签 c pointers switch-statement

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

void getInput( int *metricUnit, int *englishUnit, int *metricNum, int *englishNum, int *valueConvert, int convert);
int getMetricUnit(int *metricNum);
int getEnglishUnit (int *englishNum);
int getValueConvert(int convert, int *metricUnit);
double convertLiquid(int metricUnit, int englishUnit, int convert, double converted);
void printOutput(int metricUnit, int englishUnit, int convert, double converted);

int main (void)
{
//Declarations
int metricUnit;
int englishUnit;
int convert;
int metricNum;
int englishNum;
int valueConvert;
int converted;

//Statements
getInput(&metricUnit, &englishUnit, &metricNum, &englishNum, &valueConvert, convert);
convertLiquid(metricUnit, englishUnit, convert, converted);
printOutput(metricUnit, englishUnit, convert, converted);

return 0;
}

void getInput( int *metricUnit, int *englishUnit, int *metricNum, int *englishNum, int *valueConvert, int convert) //Function 0
{
*metricUnit = getMetricUnit(metricNum);
*englishUnit = getEnglishUnit(englishNum);
*valueConvert = getValueConvert(convert, metricUnit);
}

int getMetricUnit(int *metricNum)      //Subfunction 1 of getInput

{
printf("Metric Units (Input)\n");
printf("1 - Milliliters \n");
printf("2 - Centiliters \n");
printf("3 - Deciliters \n");
printf("4 - Liters \n");
printf("Enter the number of metric unit: ");
scanf("%d", metricNum);
printf("\n");

return *metricNum;
}

int getEnglishUnit (int *englishNum)    //Subfunction 2 of getInput

{
printf("English Units (Output) \n");
printf("1 - Fluid Ounce \n");
printf("2 - Cup \n");
printf("3 - Pint \n");
printf("4 - Quart \n");
printf("5 - Gallon \n");
printf("Enter the number of the English unit: ");
scanf("%d", englishNum);

return *englishNum;

} 

int getValueConvert(int convert, int *metricUnit)
{
switch (*metricUnit)
{
    case 1: printf("Enter the milliliter value to convert: ");
            scanf("%d", &convert); break;
    case 2: printf("Enter the centiliter value to convert: ");
            scanf("%d", &convert); break;
    case 3: printf("Enter the deciliter value to convert: ");
            scanf("%d", &convert); break;
    case 4: printf("Enter the liter value to convert: ");
            scanf("%d", &convert); break;
    default: printf("Enter the milliliter value to convert: ");
            scanf("%d", &convert); break;
}

if (convert > 0) return convert;
else return 0;
}

double convertLiquid(int metricUnit, int englishUnit, int convert, double converted)
{
double milliliter;
double centiliter;
double deciliter;
double liter;
double fluidOunce;
double cup;
double pint;
double quart;
double gallon;

    switch (metricUnit)
{
    case 1:  metricUnit = milliliter; convert = milliliter       ;break;
    case 2:  metricUnit = centiliter; convert = milliliter * 10  ;break;
    case 3:  metricUnit = deciliter ; convert = milliliter * 100 ;break;
    case 4:  metricUnit = liter     ; convert = milliliter * 1000;break;
    default: metricUnit = milliliter; convert = milliliter       ;break;
} //end swtich1
    fluidOunce = ((double)convert) * 29.537;

switch (englishUnit)
{
    case 1:  englishUnit = fluidOunce; converted = fluidOunce ; break;
    case 2:  englishUnit = cup;  converted = fluidOunce * 8 ; break;
    case 3:  englishUnit = pint;  converted = fluidOunce * 16; break;
    case 4:  englishUnit = quart;   converted = fluidOunce * 32; break;
    case 5:  englishUnit = gallon;   converted = fluidOunce * 128; break;
    default: englishUnit = fluidOunce; converted = fluidOunce     ; break;
}  //end switch2
return converted;
}

void printOutput(int metricUnit, int englishUnit, int convert, double converted)
{
switch (metricUnit)
{
    case 1: printf("%lf milliliter(s) = %lf  ", (double)convert);
    case 2: printf("%lf centiliter(s) = ", (double)convert);
    case 3: printf("%lf deciliter(s) = ", (double)convert);
    case 4: printf("%lf liter(s) = ", (double)convert);
    default: printf("%lf milliliter(s) = ", (double)convert);   

}
}


Im having the trouble with the printOutput function, 

这是试运行

Metric Units (Input)
1: Milliliter
2: Centiliter
3: Deciliter
4: Liter
Enter the number of the metric unit: 5

English Units (Output)
1: Fluid Ounce
2: Cup
3: Pint
4: Quart
5: Gallon
Enter the number of the English unit: 0
Enter the milliliter value to convert: 300
300.000 milliliter(s) = 10.144 fluid ounce(s)

我只是不知道如何获取此测试运行的最后一行。最后一行显示 2 个变量,分别是毫升和液体盎司,我如何将 2 个变量放入 2 个 switch 语句中?或者我怎样才能使最后一行以与测试运行相同的方式出现。

提前谢谢你

最佳答案

我对你问的确切问题有点困惑,但你可以在一个开关中嵌套一个开关。

void printOutput(int metricUnit, int englishUnit, int convert, double converted)
{
    switch (metricUnit)
    {
        case 1: printf("%lf milliliter(s) = ", (double)convert);
                switch (englishUnit)
                {
                    case 1: printf("%lf fluid ounce(s)\n", (double)converted); break;
                    case 2: printf("%lf cup(s)\n", (double)converted); break;
                    case 3: printf("%lf pint(s)\n", (double)converted); break;
                    case 4: printf("%lf quart(s)\n", (double)converted); break;
                    case 5: printf("%lf gallons(s)\n", (double)converted); break;
                }
        break;

        case 2: printf("%lf centiliter(s) = ", (double)convert);
                switch (englishUnit)
                {
                    case 1: printf("%lf fluid ounce(s)\n", (double)converted); break;
                    case 2: printf("%lf cup(s)\n", (double)converted); break;
                    case 3: printf("%lf pint(s)\n", (double)converted); break;
                    case 4: printf("%lf quart(s)\n", (double)converted); break;
                    case 5: printf("%lf gallons(s)\n", (double)converted); break;
                }
        break;

        case 3: printf("%lf deciliter(s) = ", (double)convert);
                switch (englishUnit)
                {
                    case 1: printf("%lf fluid ounce(s)\n", (double)converted); break;
                    case 2: printf("%lf cup(s)\n", (double)converted); break;
                    case 3: printf("%lf pint(s)\n", (double)converted); break;
                    case 4: printf("%lf quart(s)\n", (double)converted); break;
                    case 5: printf("%lf gallons(s)\n", (double)converted); break;
                }
        break;

        case 4: printf("%lf liter(s) = ", (double)convert);
                switch (englishUnit)
                {
                    case 1: printf("%lf fluid ounce(s)\n", (double)converted); break;
                    case 2: printf("%lf cup(s)\n", (double)converted); break;
                    case 3: printf("%lf pint(s)\n", (double)converted); break;
                    case 4: printf("%lf quart(s)\n", (double)converted); break;
                    case 5: printf("%lf gallons(s)\n", (double)converted); break;
                }
        break;

        default: printf("%lf milliliter(s) = ", (double)convert);
                switch (englishUnit)
                {
                    case 1: printf("%lf fluid ounce(s)\n", (double)converted); break;
                    case 2: printf("%lf cup(s)\n", (double)converted); break;
                    case 3: printf("%lf pint(s)\n", (double)converted); break;
                    case 4: printf("%lf quart(s)\n", (double)converted); break;
                    case 5: printf("%lf gallons(s)\n", (double)converted); break;
                }
        break;
    }
}

但是如果可以的话,这种方法有点费力,我会将 englishUnit 和 metricUnit 更改为数组,这样您就可以使用一个 printf() 打印输出。当然,您必须重写几乎所有程序。

char metricUnit[20];
char englishUnit[20];

printf("%lf %s(s) = %lf %s(s)\n", (double)convert, metricUnit, (double)converted, enlgishUnit); 

关于c - 使用 2 条 switch 语句打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13435599/

相关文章:

c++ - 将 CComPtr<IShelltem2> 转换为 LPWSTR*?

c++ - 格式化和未格式化的输入和输出以及流

java - 如何从 JNA 中的内存/指针对象读取结构?

c - 双重间接寻址和传递给函数的结构

c - 如何检测extern "C"生效

c - 堆内存可视化

c++ - 从 cql::cql_byte_t* {aka unsigned char*} 到 const char* 的无效转换

c++ - 错误 C2360 : Initialization of 'hdc' is skipped by 'case' label

c++ - 如何简洁地编写 'switch' 语句来猜测用户正在考虑的数字

swift - 切换大小写以检查 ViewController 是否符合协议(protocol)