当我在Xcode中使用命令行工具输入输入时,代码在我第一次输入时忽略它。为什么这样,有没有办法避免它?

时间:2017-03-08 13:23:27

标签: c scanf format-specifiers

我是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;
}

1 个答案:

答案 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()的返回值以确保成功。