- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个程序,询问用户想要进行什么转换,然后扫描他们想要转换的数字,然后进行转换并将其吐出。
以下是包含所需输出的说明:
在作业一的基础上,创建一个程序,可以选择将摄氏温度转换为华氏温度或将华氏温度转换为摄氏温度,使用“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
,而不是 double
。 double
的格式说明符是 %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
)并随后将其转换(例如使用 sscanf
或 strtod
/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/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!