用简单的等式替换scanf会使程序崩溃

时间:2015-06-07 21:22:49

标签: c scanf atoi

我正在通过C for Dummies。它有一个示例代码,用于使用getsatoi将英寸转换为cm(第135页,如果您有文本)。

现在,我想尝试使用scanf而不是可怕的gets,这是我能想到的最好的(基于作者提供的代码)。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float height_in_cm;
    char height_in_inches;

    printf("Enter your height in inches: ");
    scanf("%c"),&height_in_inches;
    height_in_cm = atoi(height_in_inches)*2.54;
    printf("You are %.2f centimetres tall.\n",height_in_cm);
    return(0);
}

程序启动,但输入后才崩溃。我哪里错了?

1 个答案:

答案 0 :(得分:0)

你在演员阵容中遇到麻烦。

atoi接受一个const char *作为输入。

你正在传递一个char,所以它隐含地将char转换为一个点,坏的坏事。

根据user3121023的建议,将height_in_inches更改为字符串。

char height_in_inches[20];

并使用%s读取

scanf("%s", height_in_inches);