鱼C论坛

 找回密码
 立即注册
查看: 2432|回复: 14

[已解决]VS代码

[复制链接]
发表于 2022-8-11 22:46:17 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>

char* getward(char c);
char* getward(char c) {

        switch(c)
        {
        case 'A':return (char*)"apple"; break;
        case 'B':return (char*)"banana"; break;
        case 'C':return (char*)"cat"; break;
        case 'D':return (char*)"dog"; break;
        case 'E':return (char*)"elephant"; break;
        default:return (char*)"none"; 
        }


}



int main() {

         char in;

        printf("请输入一个大写字母:");
        scanf_s("%c",&in);

        getward(in);

        return 0;
}


报错的地方是main函数体下scanf_s的那一行,原因:
缺少“scanf_s”的整型参数


希望能留下宝贵的建议
谢谢了
最佳答案
2022-8-14 17:33:34
康总 发表于 2022-8-12 21:03
谢谢兄弟,确实可以
但为什么不管我输入什么它都是返回none呢?
而且想问一下:那个1是什么意思?

1是被赋值的in的长度,可以改的,vs麻烦的就是这些。如果不这样输入的话可以在程序前加一项预处理命令
#define _CRT_SECURE_NO_WARNINGS 1 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-14 21:27:33 | 显示全部楼层
兄弟们 我知道是这么一回事了:
        scanf_s("%c", &in, 1);

代码要这么去写 VS才不会报错
原因:
C Primer Plus 中的解释是这样的:%c指明待打印的字符
而且书中给的例子是也是用在scanf函数
%c格式对应的是单个字符,%s格式对应的是字符串。

如果将例子中的getward函数里面的switch语句中的条件改成这样
char* getward(char c);
char* getward(char c) {

        switch (c)
        {
        case 'Aa':return (char*)"apple";
        case 'Bb':return (char*)"banana"; 
        case 'Cc':return (char*)"cat"; 
        case 'Dd':return (char*)"dog"; 
        case 'Ee':return (char*)"elephant"; 
        default:return (char*)"none";

        }

}

再加上这条,这样写代码也能运行
scanf_s("%s", in);

但这里并不推荐这样写 因为VS会报错

最后,十分感谢回复帖子的鱼油们
让我们共同进步 加油!!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 22:56:30 | 显示全部楼层
本帖最后由 临时号 于 2022-8-11 23:30 编辑

scanf_s需要给出读多少字符
#include<stdio.h>

char* getward(char c);
char* getward(char c) {

        switch(c)
        {
        case 'A':return (char*)"apple"; break;
        case 'B':return (char*)"banana"; break;
        case 'C':return (char*)"cat"; break;
        case 'D':return (char*)"dog"; break;
        case 'E':return (char*)"elephant"; break;
        default:return (char*)"none"; 
        }


}



int main() {

         char in;

        printf("请输入一个大写字母:");
        scanf_s("%c",&in,1);

        getward(in);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-12 07:00:52 | 显示全部楼层
你的自定义函数需要输出吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-12 08:23:17 | 显示全部楼层
临时号 发表于 2022-8-11 22:56
scanf_s需要给出读多少字符

一个吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-12 10:55:58 | 显示全部楼层
你输出了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-12 10:59:14 | 显示全部楼层

这要看你读多少字符,在你的代码中只需要读一个字符就可以了
还有,你的自定义函数只是返回了值,你没有输出啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-12 20:41:26 | 显示全部楼层
本帖最后由 康总 于 2022-8-12 20:55 编辑
临时号 发表于 2022-8-12 10:59
这要看你读多少字符,在你的代码中只需要读一个字符就可以了
还有,你的自定义函数只是返回了值,你没有输 ...

#include<stdio.h>

char* getward(char c);
char* getward(char c) {

        switch(c)
        {
        case 'A':return (char*)"apple"; break;
        case 'B':return (char*)"banana"; break;
        case 'C':return (char*)"cat"; break;
        case 'D':return (char*)"dog"; break;
        case 'E':return (char*)"elephant"; break;
        default:return (char*)"none";


        
        }


}



int main() {

         char in;

        printf("请输入一个大写字母:");
        scanf_s("%c",&in);

        printf("%s", getward(in));

        return 0;
}
您的意思是这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-12 20:54:25 | 显示全部楼层
第36行要写成scanf_s("%c",&in,1);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-12 21:03:38 | 显示全部楼层
本帖最后由 康总 于 2022-8-12 21:04 编辑
临时号 发表于 2022-8-12 20:54
第36行要写成scanf_s("%c",&in,1);


谢谢兄弟,确实可以
但为什么不管我输入什么它都是返回none呢?
而且想问一下:那个1是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 16:49:43 | 显示全部楼层
#include<stdio.h>

char* getward(char c);
char* getward(char c) {
        switch(c)
        {
        case 'A':return (char*)"apple"; break;
        case 'B':return (char*)"banana"; break;
        case 'C':return (char*)"cat"; break;
        case 'D':return (char*)"dog"; break;
        case 'E':return (char*)"elephant"; break;
        default:return (char*)"none";
        }
}

int main() {
        char in;
        printf("请输入一个大写字母:");
        scanf("%c",&in);//改成了scanf
        getward(in);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 16:50:19 | 显示全部楼层
康总 发表于 2022-8-12 21:03
谢谢兄弟,确实可以
但为什么不管我输入什么它都是返回none呢?
而且想问一下:那个1是什么意思?

1是scanf_c的参数个数啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-14 09:20:27 | 显示全部楼层
ExiaGN001 发表于 2022-8-13 16:49
#include

char* getward(char c);

你的scanf在VS上是会警告的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-14 17:33:34 | 显示全部楼层    本楼为最佳答案   
康总 发表于 2022-8-12 21:03
谢谢兄弟,确实可以
但为什么不管我输入什么它都是返回none呢?
而且想问一下:那个1是什么意思?

1是被赋值的in的长度,可以改的,vs麻烦的就是这些。如果不这样输入的话可以在程序前加一项预处理命令
#define _CRT_SECURE_NO_WARNINGS 1 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-14 19:46:57 | 显示全部楼层
康总 发表于 2022-8-14 09:20
你的scanf在VS上是会警告的

总所周知,代码和人有一个能跑就行。(doge
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 19:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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