我是Xcode的新手,正在使用命令行工具学习C.通常当我编写程序并输入输入时,代码将在我第一次输入时执行,但是一旦忽略第一个输入,代码就会按预期执行。我只是想知道为什么会这样?在编写代码时我做错了什么,或者这只是在Xcode中发生的事情?
这种情况发生的代码示例(这是我必须为大学做的事情。它读取输入“celsius = [something]”并显示一个图表,显示从摄氏度到华氏度的转换并对其进行评论) :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int start;
int celsius;
float fahrenheit;
scanf("celsius=%d\n", &start);
if(start<0||start>100)
{
printf("The value entered should be in the right range\n");
}
else
{
printf("Celsius | Fahrenheit | comment\n");
printf("------------------------------\n");
for(celsius=start;celsius<=100;celsius=celsius+20)
{
fahrenheit=celsius*(9.0/5.0)+32;
printf(" %d | %.2f |", celsius, fahrenheit);
if(fahrenheit==32.0)
{
printf(" Freezing point\n");
}
else if(fahrenheit>=64.0&&fahrenheit<=77.0)
{
printf(" Room temperature\n");
}
else if(fahrenheit>=122.0&&fahrenheit<=176.0)
{
printf(" Hot bath\n");
}
else if(fahrenheit==212.0)
{
printf(" Water boils\n");
}
else
{
printf("\n");
}
}
}
return 0;
}
答案 0 :(得分:0)
scanf()
中提供的格式字符串需要具有完全相同的输入才能成为匹配。在你的情况下
scanf("celsius=%d\n", &start);
正在创建问题,它需要一个由
组成的输入celsius=
字符串whitespace
和另一个newline
,以终止输入。所以,最后你需要两个 ENTER 按键来匹配标准。第一个按键产生一个newline
,它匹配空白的要求,第二个按键产生另一个新行,终止输入。
相关,引用C11
,章节§7.21.6.2,
由白色空格字符组成的指令通过读取输入来执行 第一个非空格字符(仍未读取),或直到不再有字符 被阅读。 [...]
您需要将其缩小为
scanf("celsius=%d", &start); //remove the trailing `\n`
并检查scanf()
的返回值以确保成功。