objective-c字符串,字符串格式化程序
我有一个程序,其中dreamlax与我一起工作了很多,它使用Objective-C将温度转换成华氏温度,摄氏温度,开尔文温度和朗肯温度,但转换控制台输入开尔文,然后从开尔文到最终用户所需的温度范围。objective-c字符串,字符串格式化程序
现在,我有一个想法,一旦计算完成,我想实现转换温度的最终提示。它是目前设置为仅显示像这样:
X度温度规模
,其中X =最终转换后的温度,和温度标度=规模的用户希望他的温度转换成。
假设最终用户选择华氏温度作为他/她的源温度,希望将212度转换为他/她的目标温度标度摄氏温度。该转换应等于100摄氏度很明显,但我认为该方案会显示这样的结果更好:
度华氏是摄氏度。
现在,我已经制作了需要由粗体变量替换的值。我有212和100的值很容易解决,因为100变量已经在那里了,212可以通过替换sourceTemp变量的字符串格式化程序(包含用户原始输入温度的变量)很容易地得到补救。
现在,华氏字符串有点不同。
我试图建立一些新的东西在原来的交换机,像这样:
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.对于那种凌乱的问题格式抱歉,我有点不知道怎么说,所以如果需要的话请索取澄清。
替换为%s sourceTempText,和上面的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]
,同时确保前switch
,sourceTempText = 0
。这将是一个很好的输入消毒示例:无论用户在prompt
中输入什么内容,程序都会显示有效的文本。
哇,这很好!但是,只有几个问题,char *尺度究竟是什么?[4]?这是什么意思,我明白你的逻辑,给它可能的字符串肯定。另外,我猜%s是字符串的字符串格式化程序? – Qcom 2010-08-11 01:08:01
是的,%s是用于字符串的(不是NSString,但这是另一个话题)。 'char * scales [4] = {}'说:有4个char *类型的指针。一个'char *'指针就是你在这里称之为“string”的地方;它指向字符串开始的内存,它是一个内存地址。通过说'鳞[0]'你实际上说:给我第一个(“第零”)指针在那里。然后%s在内存中查找该位置。为了进行实验,可以尝试用'scales [prompt-1] + 1'替换'scales [prompt-1]',这将使字符串从第二个字符打印出来。 (“ahrenheit”,“elsius”,“elvin”和“ankine”) – mvds 2010-08-11 01:14:13
太好了,再次感谢!现在,在您的更新中,您提到了我的sourceTempText。只有一件我感到困惑的事情是,由于case 1-4,提示=与sourceTempText相同吗?现在,如果sourceTemptText = 0,我应该显示什么?用户甚至可能会发生这种情况?哦,我应该指出,我的代码实际上通过设置结果变量= scanf来处理不正确的输入。如果scanf返回0,则出现错误,如果它返回EOF,则会出现另一个错误。我不确定这是否与您提出的相同。 – Qcom 2010-08-11 01:18:27