objective-c string,string-formatter

时间:2010-08-11 00:54:14

标签: c objective-c string string-formatting

我有一个程序,其中dreamlax与我一起工作,使用Objective-C转换华氏温度,摄氏温度,开尔文温度和朗肯温度刻度之间的温度,但将控制台输入转换为开尔文,然后从开尔文转换为最终用户所需的温标。

现在,我有一个想法,一旦计算完成,我想实现转换温度的最终提示。它目前设置为仅显示如下:

x 温度范围

其中x =最终转换温度,温度标度=用户希望将温度转换为的标度。

假设最终用户选择华氏温度作为他/她的源温度,希望将212度转换为他/她的目标温度等级摄氏度。转换应该明显等于100摄氏度,但我认为程序会更好地显示如下结果:

212 Fahrenheit 100 摄氏度。

现在,我已经将需要替换为粗体的变量替换为值。我很容易解决212和100的值,因为首先有100个变量,并且可以通过将sourceTemp变量的字符串格式化程序替换为212来轻松补救,该变量包含用户原始输入温度。 / p>

现在,华氏温度字符串有点不同。

我试图在原始开关中建立新的东西,如下所示:

switch (prompt) 
{
    case 1:
        //end-user chooses Fahrenheit
        [converter setFahrenheitValue:sourceTemp];
        sourceTempText = 1;
        break;

    case 2:
        //end-user chooses Celsius
        [converter setCelsiusValue:sourceTemp];
        sourceTempText = 2;
        break;

    case 3:
        //end-user chooses Kelvin
        [converter setKelvinValue:sourceTemp];
        sourceTempText = 3;
        break;

    case 4:
        //end-user chooses Rankine
        [converter setRankineValue:sourceTemp];
        sourceTempText = 4;
        break;
}

好的,所以我已经添加到每个不同的情况,将名为sourceTempText的新变量设置为1-4,这是最终用户选择选择他/她的源温度的相同值。

现在,我尝试使用最终开关向最终用户显示最终提示:

switch (prompt2) 
{
    case 1:
        //end-user chooses Fahrenheit
        printf("%lf degrees sourceTempText is %lf degrees Fahrenheit\n", sourceTemp, [converter fahrenheitValue]);
        break;

    case 2:
        //end-user chooses Celsius
        printf("%lf degrees sourceTempText is %lf degrees Celsius\n", sourceTemp, [converter celsiusValue]);
        break;

    case 3:
        //end-user chooses Kelvin
        printf("%lf degrees sourceTempText is %lf degrees Kelvin\n", sourceTemp, [converter kelvinValue]);
        break;

    case 4:
        //end-user chooses Rankine
        printf("%lf degrees sourceTempText is %lf degrees Rankine\n", sourceTemp, [converter rankineValue]);
        break;
}

我现在不确定,如果我可以将sourceTempText插入字符串中,就像我在这里一样,也许我必须使用字符串格式化程序,但我不确定。这应该是一个简单的解决方案,我只想把它扔出去! :)

P.S。对不起那种凌乱的问题格式,我有点不知道怎么说,所以请在需要时请求澄清。

1 个答案:

答案 0 :(得分:2)

将sourceTempText替换为%s,并在switch语句之上声明可能的字符串,如下所示:

char *scales[4] = { "Fahrenheit", "Celsius", "Kelvin", "Rankine" };

然后在printf之后为每个sourceTemp,添加和参数:

printf("%lf degrees %s is %lf degrees Fahrenheit\n",
                   sourceTemp, scales[prompt-1], [converter fahrenheitValue]);

那是prompt-1因为计数从零开始,你从1开始。


ps。我现在看到您设置了sourceTempText = 1/2/3/4; - 我刚刚使用了prompt,因为它具有相同的值。你可以做的是设置

char *scales[5] = { "Error!", "Fahrenheit", "Celsius", "Kelvin", "Rankine" };

并使用scales[sourceTempText],同时确保在switchsourceTempText = 0之前。这将成为输入清理的一个很好的例子:无论用户设法放入prompt,您的程序将始终显示有效文本。