我遇到与输入类型的不同类型变量相关的问题。 我的程序很简单。我以摄氏度键入温度,程序打印摄氏度和华氏温度值,然后循环自身询问摄氏度的下一个值。如果输入" -99999"它会停止。 当我输入一个单词" elo"我想把它改成停止(它基本上意味着"再见"在波兰俚语:))但经过几个小时的尝试后我放弃了...... 我会感激任何帮助!
#include <stdio.h>
float fahrenheit(long);
int main()
{
int celsius;
printf("Type the temperature in celsius: ", &celsius);
scanf_s("%ld", &celsius);
while (celsius != -99999) {
printf("%ld %6.1f\n", celsius, fahrenheit(celsius));
printf("Type the temperature in celsius: ", &celsius);
scanf_s("%ld", &celsius);
}
}
float fahrenheit(long celsius)
{
return (float) 1.8*celsius + 32.0;
}
答案 0 :(得分:0)
有很多方法可以做到这一点。我认为最简单的方法是检测scanf
无法读取数字然后再回到字符串输入。
int celcius;
char buff[10];
bool elo = false;
int args_read = scanf(" %d", &celcius);
if (args_read < 1) {
// User must have put in a non-number
scanf(" %s", buff);
if (strcmp(buff, "elo") == 0) {
elo = true;
}
}
答案 1 :(得分:0)
行printf("Type the temperature in celsius: ", &celsius);
很奇怪。你的编译器没有抱怨这个吗?为什么要提供celsius
的地址作为此呼叫的参数?另一个错误是scanf_s("%ld", &celsius);
,当您仅将celsius
声明为long int
时,会将celsius
作为int
值读入。在处理代码时始终启用编译器警告是个好主意。
如@StephenDocy所述,您需要先将输入作为字符串读入,然后检查它是否为数字或停用词。
您还可以稍微简化代码,以避免重复printf("Type the temperature in celsius: ", &celsius);
之类的行。我认为将celsius
视为浮点值
#include <stdio.h>
#include <string.h>
float fahrenheit(float);
int main() {
float celsius;
char input_buffer[256];
while (1) {
printf("Type the temperature in celsius:\n");
scanf("%255s", input_buffer);
if (strcmp("elo", input_buffer) == 0) break;
if (sscanf(input_buffer, "%f", &celsius) == 1) {
printf("%6.1f %6.1f\n", celsius, fahrenheit(celsius));
}
}
return 0;
}
float fahrenheit(float celsius) {
return 1.8 * celsius + 32.0;
}