gpt4 book ai didi

第一次在 objective-c 中创建程序循环

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:57 24 4
gpt4 key购买 nike

我正在尝试添加一些“重播值”,如果您愿意的话,可以通过添加一个简单的循环来添加我在 Objective-C 中的温标转换控制台程序。

现在,这是我当前 main.m 文件的代码:

#import <Cocoa/Cocoa.h>
#import "class.h"

int main(int argc, char *argv[])
{
int result;
int prompt, prompt2, sourceTempText;
double sourceTemp;

printf("Please choose a source temperature scale:\n[1] Fahrenheit\n[2] Celsius\n[3] Kelvin\n[4] Rankine\n\n");

result = scanf("%i", &prompt);

if (result != 1)
printf("I couldn't understand your input, I need only one number!");

else if (result == EOF)
printf("I apologize, I encountered an error when trying to read your input.");

else if (result == 1)
{
printf("\nNow, please enter the temperature you would like to convert:\n\n");

scanf("%lf", &sourceTemp);

Temperature *converter = [[Temperature alloc] init];

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;
}

printf("\nNow, please choose a target temperature scale:\n[1] Fahrenheit\n[2] Celsius\n[3] Kelvin\n[4] Rankine\n\n");

scanf("%i", &prompt2);

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

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

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

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

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

}

}

好的,所以我想用 printf 语句提示用户,询问他们是否想在完成第一次转换后转换另一个温度。

提示会要求最终用户按 0 退出程序,或按 1 进行另一次转换。

我的第一个倾向是声明一个整数变量,一旦最终用户输入了他们的选择,该变量就会从 scanf 设置为 0 或 1。

然后,如果新变量==1,则循环回到开头,否则,退出程序。

很简单吧?

只是想知道,是否有更有效的方法来循环这个程序,或者这是一个好方法,至少我现在拥有的基本知识是这样。

最佳答案

是的,你可以把它放在一个循环中,并在循环结束前询问退出问题。根据答案,您可以只exit(0)。或者你可以将它整合到第一个问题中; 1=华氏度,2=...,0 = 退出。

循环可以只是while(1) { ... } 。另一种方法是在循环之前有一个变量:

int done = 0;

然后遍历 while ( !done ) { ... } 。 (将其读作“尚未完成”)。在循环中,完成后设置done=1,然后循环将终止。

(为清楚起见:它只会在完成整个 { ... } block 后终止,但您会发现这一点 - 如果您到了那一点,您需要阅读(/询问)关于 continuebreak)


有几件事需要考虑:您的循环是否需要清理?这里

 Temperature *converter = [[Temperature alloc] init];

你分配了一些内存。如果你再循环一次,你会分配更多的内存。依此类推:这称为“内存泄漏”。这种情况一直持续到内存不足并且程序崩溃(尽管在这种情况下会花费很长时间)。

所以当你完成转换器时,你真的应该释放它,通过做

 [converter release];

这样你就不会泄漏任何内存。


此外现在是将部分程序放在单独的函数中的好时机,因为当它变得越来越大时,会变得有点不清楚究竟发生了什么。

关于第一次在 objective-c 中创建程序循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com