Weabu 发表于 2022-4-15 14:49:40

字符串问题

#include <stdio.h>
#include <math.h>

int main()
{

    float a, b, d, e;
    char name;

    printf("请输入华氏度:");
    scanf("%f", &a);
    while (getchar() != '\n')
      ;
    b = (a - 32) * 5 / 9;
    printf("转换为摄氏度是%.2f\n", b);

    printf("请输入您的姓名:");
    scanf("%s", name);
    while (getchar() != '\n')
      ;
    printf("请输入您的身高(cm):");
    scanf("%f", &d);
    while (getchar() != '\n')
      ;
    printf("请输入您的体重(kg):");
    scanf("%f", &e);
    while (getchar() != '\n')
      ;
    printf("========== 正在为您转换 ==========\n");
    d = d / 2.5;
    e = 2.2 * e;
    printf("%s的身高是%.2f(in),体重是%.2f(lb)",name, d, e);

    return 0;
}

输出:
请输入华氏度:45
转换为摄氏度是7.22
请输入您的姓名:发发发
请输入您的身高(cm):170
请输入您的体重(kg):69。1
========== 正在为您转换 ==========
zsh: abort   

问1:以上是什么问题,怎么解决
问2:修改代码第一次摁运行是从请输入您的身高(cm):   开始,这是为什么。之后在运行就是正常从华氏度开始

Weabu 发表于 2022-4-15 14:57:32

#include <stdio.h>
#include <math.h>

int main(void)//为什么要加void
{

    float a, b, d, e;
    char name;

    printf("请输入华氏度:");
    scanf("%f", &a);
    while (getchar() != '\n')
      ;
    b = (a - 32) * 5 / 9;
    printf("转换为摄氏度是%.2f\n", b);

    printf("请输入您的姓名:");
    scanf("%s", name);//为什么这里没有&
    while (getchar() != '\n')
      ;
    printf("请输入您的身高(cm):");
    scanf("%f", &d);
    while (getchar() != '\n')
      ;
    printf("请输入您的体重(kg):");
    scanf("%f", &e);
    while (getchar() != '\n')
      ;
    printf("========== 正在为您转换 ==========\n");
    d = d / 2.5;
    e = 2.2 * e;
    printf("%s的身高是%.2f(in),体重是%.2f(lb)",name, d, e);

    return 0;
}

jackz007 发表于 2022-4-15 16:20:18

#include <stdio.h>

int main(void)
{

    float a , b , d , e                                                ;
    char name                                                       ;

    printf("请输入华氏度 : ")                                          ;
    scanf("%f" , & a)                                                ;
    b = (a - 32) * 5 / 9                                             ;
    printf("转换为摄氏度是%.2f\n", b)                                  ;
    printf("请输入您的姓名 : ")                                        ;
    scanf("%s" , name)                                                 ;
    printf("请输入您的身高(cm) : ")                                    ;
    scanf("%f" , & d)                                                ;
    printf("请输入您的体重(kg) : ")                                    ;
    scanf("%f" , & e)                                                ;
    printf("========== 正在为您转换 ==========\n")                     ;
    d = d / 2.5;
    e = 2.2 * e;
    printf("%s 的身高是 %.2f(in) , 体重是 %.2f (lb)\n" , name , d , e) ;
}
      编译、运行实况:
D:\\>g++ -o x x.c

D:\\>x
请输入华氏度 : 45
转换为摄氏度是7.22
请输入您的姓名 : 发发发
请输入您的身高(cm) : 170
请输入您的体重(kg) : 69.1
========== 正在为您转换 ==========
发发发 的身高是 68.00(in) , 体重是 152.02 (lb)

D:\\>

Weabu 发表于 2022-4-15 18:53:11

jackz007 发表于 2022-4-15 16:20
编译、运行实况:

问1:scanf函数后什么时候需要加入while (getchar() != '\n')
      ;//清空键盘缓冲区域
因为我上次这个代码
#include <stdio.h>
#include <math.h>

int main()
{

int i,c;
long long int result;
char k;


printf("请输入一个整数:");
scanf("%d", &i);
result = pow(i, 10);
printf("%lld\n", result);

printf("请输入一个字符:");
scanf("%c", &k);

printf("请输入一个十六进制:");
scanf("%x",&c);
result = pow(c,2);
printf("%llx\n",result);

return 0;
}
终端会跳过 输入一个字符
页: [1]
查看完整版本: 字符串问题