鱼C论坛

 找回密码
 立即注册
查看: 4766|回复: 3

[已解决]字符串问题

[复制链接]
发表于 2022-4-15 14:49:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

int main()
{

    float a, b, d, e;
    char name[8];

    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):   开始,这是为什么。之后在运行就是正常从华氏度开始
最佳答案
2022-4-15 16:20:18
  1. #include <stdio.h>

  2. int main(void)
  3. {

  4.     float a , b , d , e                                                ;
  5.     char name[8]                                                       ;

  6.     printf("请输入华氏度 : ")                                          ;
  7.     scanf("%f" , & a)                                                  ;
  8.     b = (a - 32) * 5 / 9                                               ;
  9.     printf("转换为摄氏度是%.2f\n", b)                                  ;
  10.     printf("请输入您的姓名 : ")                                        ;
  11.     scanf("%s" , name)                                                 ;
  12.     printf("请输入您的身高(cm) : ")                                    ;
  13.     scanf("%f" , & d)                                                  ;
  14.     printf("请输入您的体重(kg) : ")                                    ;
  15.     scanf("%f" , & e)                                                  ;
  16.     printf("========== 正在为您转换 ==========\n")                     ;
  17.     d = d / 2.5;
  18.     e = 2.2 * e;
  19.     printf("%s 的身高是 %.2f(in) , 体重是 %.2f (lb)\n" , name , d , e) ;
  20. }
复制代码

        编译、运行实况:
  1. D:\[00.Exercise]\[C]>g++ -o x x.c

  2. D:\[00.Exercise]\[C]>x
  3. 请输入华氏度 : 45
  4. 转换为摄氏度是7.22
  5. 请输入您的姓名 : 发发发
  6. 请输入您的身高(cm) : 170
  7. 请输入您的体重(kg) : 69.1
  8. ========== 正在为您转换 ==========
  9. 发发发 的身高是 68.00(in) , 体重是 152.02 (lb)

  10. D:\[00.Exercise]\[C]>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-15 14:57:32 | 显示全部楼层
#include <stdio.h>
#include <math.h>

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

    float a, b, d, e;
    char name[8];

    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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-15 16:20:18 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>

  2. int main(void)
  3. {

  4.     float a , b , d , e                                                ;
  5.     char name[8]                                                       ;

  6.     printf("请输入华氏度 : ")                                          ;
  7.     scanf("%f" , & a)                                                  ;
  8.     b = (a - 32) * 5 / 9                                               ;
  9.     printf("转换为摄氏度是%.2f\n", b)                                  ;
  10.     printf("请输入您的姓名 : ")                                        ;
  11.     scanf("%s" , name)                                                 ;
  12.     printf("请输入您的身高(cm) : ")                                    ;
  13.     scanf("%f" , & d)                                                  ;
  14.     printf("请输入您的体重(kg) : ")                                    ;
  15.     scanf("%f" , & e)                                                  ;
  16.     printf("========== 正在为您转换 ==========\n")                     ;
  17.     d = d / 2.5;
  18.     e = 2.2 * e;
  19.     printf("%s 的身高是 %.2f(in) , 体重是 %.2f (lb)\n" , name , d , e) ;
  20. }
复制代码

        编译、运行实况:
  1. D:\[00.Exercise]\[C]>g++ -o x x.c

  2. D:\[00.Exercise]\[C]>x
  3. 请输入华氏度 : 45
  4. 转换为摄氏度是7.22
  5. 请输入您的姓名 : 发发发
  6. 请输入您的身高(cm) : 170
  7. 请输入您的体重(kg) : 69.1
  8. ========== 正在为您转换 ==========
  9. 发发发 的身高是 68.00(in) , 体重是 152.02 (lb)

  10. D:\[00.Exercise]\[C]>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}
终端会跳过 输入一个字符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 05:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表