鱼C论坛

 找回密码
 立即注册
查看: 3919|回复: 22

我用的vs2017,scanf_()函数出错了,哪位大佬知道怎么回事啊?

[复制链接]
发表于 2018-8-15 18:41:03 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>

int add(int, int);
int sub(int, int);
int *pus(char);

int main()
{
        int num1, num2;
        char op;
        int (*p)(int num1, int num2);
        printf("请输入一个式子,如: ( a+b )\n");
        scanf_s("%d %c%d", &num1, &op, &num2);
        p = pus(op);
        printf("%d %c %d = %d\n", num1, op, num2, p(num1, num2));
        system("pause");
}

int add(int num1, int num2)
{
        return num1+num2;
}

int sub(int num1, int num2)
{
        return num1 - num2;
}

int * pus(char op)
{
        switch (op)
        {
        case '+':return add;
        case '-':return sub;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-15 18:44:54 From FishC Mobile | 显示全部楼层
scanf("%d %c %d", ...); 空格
switch,case 后面加 break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 18:45:13 | 显示全部楼层
本帖最后由 无符号整形 于 2018-8-15 18:47 编辑

1.在文件头定义#define _CRT_SECURE_NO_WARNINGS
2.使用scanf_s

点评

VS会说scanf fread fwrite等等这些函数不安全。  发表于 2018-8-15 18:45
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-15 18:49:23 | 显示全部楼层
claws0n 发表于 2018-8-15 18:44
scanf("%d %c %d", ...); 空格
switch,case 后面加 break

加空格没用,它说写入位置 0x0113133E 时发生访问冲突
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-15 18:50:28 | 显示全部楼层
无符号整形 发表于 2018-8-15 18:45
1.在文件头定义#define _CRT_SECURE_NO_WARNINGS
2.使用scanf_s

什么意思啊?初学萌新求大佬解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 18:54:32 | 显示全部楼层
本帖最后由 无符号整形 于 2018-8-15 19:39 编辑
Jacob01 发表于 2018-8-15 18:50
什么意思啊?初学萌新求大佬解释


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

使用道具 举报

发表于 2018-8-15 18:59:41 | 显示全部楼层
Jacob01 发表于 2018-8-15 18:49
加空格没用,它说写入位置 0x0113133E 时发生访问冲突

......以后给上报错的资料吧~
但是我给你的建议还是补上。

不需要 int *pus(char) 直接并到 main() ,用 switch(op)就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 19:03:26 | 显示全部楼层
无符号整形 发表于 2018-8-15 18:45
1.在文件头定义#define _CRT_SECURE_NO_WARNINGS
2.使用scanf_s

不是这个整型吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 19:04:32 | 显示全部楼层
ZLSTJ 发表于 2018-8-15 19:03
不是这个整型吗

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

使用道具 举报

 楼主| 发表于 2018-8-15 19:16:50 | 显示全部楼层
claws0n 发表于 2018-8-15 18:59
......以后给上报错的资料吧~
但是我给你的建议还是补上。

我的这个写法只是我看小甲鱼视频的时候打的,scanf_s("%d%c%d",&num1,  &op, &num2);这个语句不能执行,我输入了,它显示访问冲突
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-15 19:20:36 | 显示全部楼层
无符号整形 发表于 2018-8-15 18:54
好吧……当我没说
我还以为是scanf_s()的问题
应该是因为函数指针的问题,pus返回类型有问题,应该返回 ...

只是输入问题,我用这个都不行
#include<stdio.h>

int main()
{
        int a, b;
        char c;
        scanf_s("%d%c%d", &a, &c, &b);
        system("pause");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 19:36:03 | 显示全部楼层
Jacob01 发表于 2018-8-15 19:20
只是输入问题,我用这个都不行
#include

先printf三个变量内容试试?
抱歉,我还以为你函数返回的函数返回值不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 19:40:44 | 显示全部楼层
Jacob01 发表于 2018-8-15 19:20
只是输入问题,我用这个都不行
#include
  1. #include<stdio.h>

  2. int add(int, int);
  3. int sub(int, int);
  4. int calc(int , int , char);

  5. int main()
  6. {
  7.         int num1, num2;
  8.         char op;
  9.         printf("请输入一个式子,如: a+b\n");
  10.         scanf("%d %c %d", &num1, &op, &num2);  //多重输入,建议有空格
  11.         
  12.         int p = calc(num1, num2, op);
  13.         printf("%d %c %d = %d\n", num1, op, num2, p);
  14.         system("pause");  // 你用 dev c++ ? 在工具设定之后就不用写这一句了
  15.         return 0;  //请加
  16. }

  17. int add(int num1, int num2)
  18. {
  19.     return num1 + num2;
  20. }

  21. int sub(int num1, int num2)
  22. {
  23.     return num1 - num2;
  24. }

  25. int calc(int num1, int num2, char op)
  26. {
  27.     switch (op)
  28.     {
  29.     case '+':return add(num1,num2);break;
  30.     case '-':return sub(num1,num2);break;
  31.     }
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 19:46:37 | 显示全部楼层
Jacob01 发表于 2018-8-15 19:20
只是输入问题,我用这个都不行
#include

指针版本
  1. #include<stdio.h>

  2. int add(int *, int *);
  3. int sub(int *, int *);
  4. int calc(int *, int *, char *);

  5. int main()
  6. {
  7.         int num1, num2;
  8.         char op;
  9.         printf("请输入一个式子,如: a+b\n");
  10.         scanf("%d %c %d", &num1, &op, &num2);
  11.         
  12.         int p = calc(&num1, &num2, &op);
  13.         printf("%d %c %d = %d\n", num1, op, num2, p);
  14. //        system("pause");
  15.         return 0;
  16. }

  17. int add(int *num1, int *num2)
  18. {
  19.     return *num1 + *num2;
  20. }

  21. int sub(int *num1, int *num2)
  22. {
  23.     return *num1 - *num2;
  24. }

  25. int calc(int *num1, int *num2, char *op)
  26. {
  27.     switch (*op)
  28.     {
  29.     case '+':return add(num1,num2);break;
  30.     case '-':return sub(num1,num2);break;
  31.     }
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-16 03:24:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-16 03:26:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-16 08:02:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-16 08:04:05 | 显示全部楼层
单步调试一下,看看哪一步出错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-16 23:52:13 From FishC Mobile | 显示全部楼层
scanf_s("%d %c%d", &num1, &op, &nu你%d和%c之间有个空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-17 11:35:54 | 显示全部楼层
我之前也有这个问题,你把安全生命开发周期选项关闭掉,勾选空项目就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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