J'ai un programme avec lequel dreamlax a beaucoup travaillé avec moi, qui utilise Objective-C pour convertir les températures entre les échelles de température Fahrenheit, Celsius, Kelvin et Rankine, mais en convertissant les entrées de console en Kelvin, puis de Kelvin à l'échelle de température désirée par l'utilisateur final.objectif-c chaîne, string-formatter
Maintenant, j'ai une idée que je voudrais mettre en œuvre pour l'invite finale des températures converties une fois les calculs effectués. Il est mis en place actuellement à l'affichage uniquement comme ceci:
x degrés température échelle
Où x = la température convertie finale, et la température échelle = l'échelle l'utilisateur souhaite avoir sa température converti en. Supposons que l'utilisateur final choisisse Fahrenheit comme température de sa source, souhaitant convertir 212 degrés dans son échelle de température cible de Celsius. Les conversions doivent être égaux à 100 degrés Celsius évidemment, mais je pense que le programme serait mieux d'afficher le résultat comme celui-ci:
degrés Fahrenheit est degrés Celsius.
Maintenant, j'ai fait les valeurs qui doivent être remplacées par des variables en gras. J'ai les valeurs 212 et 100 résolues facilement, car 100 variables ont été là en premier lieu, et 212 peut facilement être corrigé en le remplaçant par le formateur de chaîne de la variable sourceTemp, la variable qui contient la température d'entrée d'origine des utilisateurs.
Maintenant, la chaîne Fahrenheit est un peu différente.
J'ai essayé d'établir quelque chose de nouveau dans le commutateur d'origine comme ceci:
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;
}
OK, j'ai donc ajouté à chaque cas différent, établissant une nouvelle variable nommée sourceTempText soit 1-4, le même valeur que l'utilisateur final a choisi de choisir la température de sa source.
Maintenant, voici comment j'ai essayé d'afficher l'invite finale à l'utilisateur final avec le commutateur final:
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;
}
Je ne sais pas maintenant, si je peux insérer sourceTempText dans la chaîne comme je l'ai ici, au lieu de cela, peut-être que je dois utiliser un formateur de chaîne, mais je ne suis pas sûr. Ca devrait être une solution facile, je voulais juste le jeter ici! :)
P.S. désolé pour le genre de mise en forme de question désordonnée, je ne sais pas comment l'exprimer, alors s'il vous plaît demander des éclaircissements si nécessaire.
Wow qui a bien fonctionné! Juste quelques questions cependant, quelle est exactement les échelles char * [4]? Qu'est-ce que cela signifie, je comprends votre logique en lui donnant les chaînes possibles à coup sûr. Aussi, je suppose que% s est le formateur de chaîne pour la chaîne? – Qcom
Oui,% s est pour la chaîne (pas pour NSString, mais c'est un autre sujet). 'char * scales [4] = {}' dit: Il y a 4 pointeurs de type 'char *'. Un pointeur 'char *' est ce que vous appelleriez "string" ici; il pointe vers la mémoire où la chaîne commence, c'est une adresse mémoire. En disant 'échelles [0]', vous dites: donnez-moi le premier pointeur ("zéro-th"). Le% s regarde alors dans cet emplacement en mémoire. Pour expérimenter, vous pouvez essayer de remplacer 'scales [prompt-1]' par 'scales [prompt-1] + 1', ce qui fera que la chaîne sera imprimée à partir du deuxième caractère. ("ahrenheit", "elsius", "elvin" et "ankine") – mvds
Super, merci encore! Maintenant, dans votre mise à jour, vous avez mentionné mon sourceTempText. Juste une chose que je suis confus à propos de, est prompt = à la même chose que sourceTempText à cause des cas 1-4? Maintenant, que dois-je afficher si sourceTemptText = 0? Comment un utilisateur peut-il même obtenir cela? Oh, je devrais souligner que mon code gère réellement les entrées incorrectes en définissant une variable de résultat = à scanf. Si scanf renvoie 0, alors il y a une erreur et si elle retourne EOF, il y a une autre erreur. Je ne sais pas si c'est la même chose que ce que vous avez mentionné. – Qcom