gpt4 book ai didi

确定温度转换的 C 程序不起作用

转载 作者:行者123 更新时间:2023-11-30 20:03:24 24 4
gpt4 key购买 nike

我正在尝试创建一个程序,询问用户想要进行什么转换,然后扫描他们想要转换的数字,然后进行转换并将其吐出。

以下是包含所需输出的说明:

在作业一的基础上,创建一个程序,可以选择将摄氏温度转换为华氏温度或将华氏温度转换为摄氏温度,使用“ifelse”语句来选择要使用的转换。请务必在 .C 文件中包含正确的 header 。使用 K 和 R 格式。将文件命名为“first Initial Last name-assingment2.c”,例如:“rgalus-assingment2.c”下面是我期望的程序输出:

Enter 1 to convert Celsius to Fahrenheit
Enter 2 to convert Fahrenheit to Celsius
Enter 0 to exit

1
10
10 degrees Celsius is equal to 50 degrees Fahrenheit

Enter 1 to convert Celsius to Fahrenheit
Enter 2 to convert Fahrenheit to Celsius
Enter 0 to exit

2
32
32 degrees Fahrenheit equals 0 degrees Celsius

Enter 1 to convert Celsius to Fahrenheit
Enter 2 to convert Fahrenheit to Celsius
Enter 0 to exit

0

“exit the program”

我的问题是,虽然它会扫描我的选择,但程序会在我输入要转换的数字之前结束。

下面是我的代码:

#include <stdio.h>

int main(void) {
double userConversionChoice;
double CelsiusToFahrenheitResult;
double FahrenheitToCelsiusResult;
double userConversionNumber;

printf("Enter 1 to convert Celsius to Fahrenheit\n");
printf("Enter 2 to convert Fahrenheit to Celsius\n");
printf("Enter 0 to exit\n");

scanf("%d", userConversionChoice);

if (userConversionChoice == 1) {

scanf("%d", userConversionNumber);
CelsiusToFahrenheitResult = (1.8 * userConversionNumber) + 32.0;

printf("%d degrees Celsius equals %d degrees Fahrenheit", userConversionNumber, CelsiusToFahrenheitResult);

}
else {

if (userConversionChoice == 2) {
scanf("%d", userConversionNumber);
FahrenheitToCelsiusResult = (userConversionNumber - 32.0) / 1.8;

printf("%d degrees Fahrenheit equals %d degrees Celsius", userConversionNumber, FahrenheitToCelsiusResult);
}
else {
printf("exit the program");
}
}




return(0);
}

最佳答案

当前的问题是:

  • scanf 接受指向变量 (&x) 的指针,而不是变量。这是因为普通函数调用 f(x) 无法修改 x(参数按值传递)。

  • %d 转换说明符读取一个整数(并需要相应的 int * 参数)。您的变量是 double 类型,因此您需要将它们更改为 int 或使用 %lf

  • 同样,printf %d 需要一个 int,而不是 doubledouble 的格式说明符是 %f

  • 使用 scanf 时应检查返回值,以确保值已成功读取。 scanf 返回分配的输入项的数量。

因此:

int userConversionChoice;
if (scanf("%d", &userConversionChoice) != 1) {
fprintf(stderr, "failed to read input\n");
return EXIT_FAILURE; // EXIT_FAILURE is in <stdlib.h>
}
double userConversionNumber;
if (scanf("%lf", &userConversionNumber) != 1) {
printf("%.2f degrees Celsius equals %.2f degrees Fahrenheit", userConversionNumber, CelsiusToFahrenheitResult);
<小时/>

从长远来看,我建议完全避免使用 scanf 进行用户输入。它很难正确使用,它会导致用户界面困惑(例如,如果用户只是按回车键,您的程序将坐在那里看似卡住,但实际上仍在等待 scanf 中的输入),而且很难从错误中恢复。

为了获得更直观的行为,请读取整行输入(例如使用 fgets)并随后将其转换(例如使用 sscanfstrtod/strtol):

char buf[200];

...
printf("enter a number: ");
fflush(stdout);
if (!fgets(buf, sizeof buf, stdin)) {
return 0; // end-of-input was reached
}
double num = strtod(buf, NULL); // convert input to number

关于确定温度转换的 C 程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52379456/

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