C:S1E8字符和字符串作业问题
本帖最后由 443316732 于 2020-8-4 13:02 编辑#include <stdio.h>
int main()
{
char name;
float height, weight;
printf("请输入您的姓名:");
scanf_s("%s", name);
printf("请输入您的身高(cm):");
scanf_s("%f", &height);
printf("请输入您的体重(kg):");
scanf_s("%f", &weight);
printf("========== 正在为您转换 ==========\n");
height = height / 2.54; // 厘米转换为英寸
weight = weight / 0.453; // 公斤转换为磅
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, height, weight);
return 0;
}
萌新求助大佬,说下这个题自己找错的路程
第一次我找到了scanf函数现在已经不用了因此将旧版本的scanf替换成了scanf_s
后面以为是name前没加&的原因后来查了一下发现可以不用加,实在找不到答案了百度也没有原题所以来求助论坛里的大佬 试试下面这段代码:
#include <stdio.h>
int main()
{
char name;
float height, weight;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身高(cm):");
scanf("%f", &height);
printf("请输入您的体重(kg):");
scanf("%f", &weight);
printf("========== 正在为您转换 ==========\n");
height = height / 2.54;// 厘米转换为英寸
weight = weight / 0.453; // 公斤转换为磅
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, height, weight);
return 0;
} {:10_266:}希望大佬们不吝赐教,学的东西比较少目前还找不到问题所在 scanf_s函数有三个参数! 本帖最后由 SHRS23 于 2020-8-4 13:06 编辑
以下内容来自百度百科:
ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节
char buf={'\0'};
scanf("%s", buf);
如果输入1234567890,后面的部分会被写到别的空间上去。
以上代码如果用scanf_s,第二行应改为scanf_s("%s",buf,5),表示最多读取5-1个字符,因为buf要放'\0'
scanf_s最后一个参数是缓冲区的大小,表示最多读取n-1个字符.
vc++2005/2008中提供了scanf_s(),在最新的VS2015中也提供了scanf_s()。在调用时,必须提供一个数字以表明最多读取多少位字符。
3.读取单个字符也需要限定长度:scanf_s("%c,%c",&c1,1,&c2,1);而不能写成scanf_s("%c,%c",&c1, &c2,1, 1);否则编译器会报错 本帖最后由 永恒的蓝色梦想 于 2020-8-4 13:11 编辑
你可以改成以下两种代码:
第一种:关闭警告,使用 scanf 。#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char name;
float height, weight;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身高(cm):");
scanf("%f", &height);
printf("请输入您的体重(kg):");
scanf("%f", &weight);
printf("========== 正在为您转换 ==========\n");
height = height / 2.54; // 厘米转换为英寸
weight = weight / 0.453; // 公斤转换为磅
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, height, weight);
return 0;
}
第二种:使用 scanf_s,但是 scanf_s 输入字符串多提供一个长度参数,所以应该改成这样:#include <stdio.h>
int main()
{
char name;
float height, weight;
printf("请输入您的姓名:");
scanf_s("%s", name, 256);
printf("请输入您的身高(cm):");
scanf_s("%f", &height);
printf("请输入您的体重(kg):");
scanf_s("%f", &weight);
printf("========== 正在为您转换 ==========\n");
height = height / 2.54; // 厘米转换为英寸
weight = weight / 0.453; // 公斤转换为磅
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, height, weight);
return 0;
} 永恒的蓝色梦想 发表于 2020-8-4 13:09
你可以改成以下两种代码:
第一种:关闭警告,使用 scanf 。
第二种:使用 scanf_s,但是 scanf_ ...
谢谢! SHRS23 发表于 2020-8-4 13:05
以下内容来自百度百科:
ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能 ...
谢谢
页:
[1]