程序停留在程序的第一个打印行上

时间:2015-03-21 12:15:39

标签: c

我正在学习C编程的入门教程。 它告诉我写一个简单的程序,将摄氏度转换为华氏度。

我编写了视频中显示的代码,但它只打印第一行然后卡住了。

我不明白我的计划有什么问题:

#include <stdio.h>

//program to convert Celsius to Fahrenheit

int main()
{
    int c;
    int f;

    printf("Enter the temperature in Celsius:");
    scanf("%d\n", &c);
    f=9*c/5 + 32;
    printf("The temperature in Fahrenheit is: %d\n",f);
    return 0;
}

我最近开始使用Ubuntu并使用Code Block来构建使用gcc作为编译器的程序。

请帮忙 谢谢你;

2 个答案:

答案 0 :(得分:2)

问题出在这行代码中:

scanf("%d\n", &c);

转义序列&#39; \ n&#39;在这种情况下,它的行为并不像你认为的那样:它没有告诉scanf()期望x \ n形式的输入x数字,其中&#39; \ n&#39;是一个换行符,但实际上被解释为必须完全匹配的模式,因为scanf()不会扩展转义序列。

From the glibc manual

  

模板字符串中不属于转换规范的其他字符必须与输入流中的字符完全匹配;如果不是这种情况,则会发生匹配失败。

因此,如果输入10 \ n作为输入(其中\ n是实际字符而不是换行符),则程序可以正常工作。

由于这显然不是您正在寻找的行为,您可以通过从您用来调用scanf()的模板字符串中删除\ n来解决问题。

在任何情况下,scanf()默认忽略空格(例如&#39; \ n&#39;),除非您使用%c或%[作为转换说明符,所以没有必要尝试处理它。

另一方面,这一行出现了错误

f=9*c/5 + 32;

正确的转换公式是

f=(9/5) * c + 32;

在进行计算机算术时,操作顺序会影响最终结果。 (无论如何,在这种情况下,使用浮子来限制精度损失会更好)

答案 1 :(得分:0)

在以下程序中......

#include <stdio.h>

//program to convert Celsius to Fahrenheit


int main()
{
    int c;
    int f;

    printf("Enter the temperature in Celsius:");
    scanf("%d\n", &c);

此行等待控制台上的用户输入

    f=9*c/5 + 32;
    printf("The temperature in Fahrenheit is: %d\n",f);
    return 0;
}

运行程序时,假设在程序等待时输入整数。输入值后,程序将继续,执行转换并显示输出。