Jacob01 发表于 2018-8-15 18:41:03

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

#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;
        }
}

claws0n 发表于 2018-8-15 18:44:54

scanf("%d %c %d", ...); 空格
switch,case 后面加 break

无符号整形 发表于 2018-8-15 18:45:13

本帖最后由 无符号整形 于 2018-8-15 18:47 编辑

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

Jacob01 发表于 2018-8-15 18:49:23

claws0n 发表于 2018-8-15 18:44
scanf("%d %c %d", ...); 空格
switch,case 后面加 break

加空格没用,它说写入位置 0x0113133E 时发生访问冲突

Jacob01 发表于 2018-8-15 18:50:28

无符号整形 发表于 2018-8-15 18:45
1.在文件头定义#define _CRT_SECURE_NO_WARNINGS
2.使用scanf_s

什么意思啊?初学萌新求大佬解释{:5_96:}

无符号整形 发表于 2018-8-15 18:54:32

本帖最后由 无符号整形 于 2018-8-15 19:39 编辑

Jacob01 发表于 2018-8-15 18:50
什么意思啊?初学萌新求大佬解释

见12楼

claws0n 发表于 2018-8-15 18:59:41

Jacob01 发表于 2018-8-15 18:49
加空格没用,它说写入位置 0x0113133E 时发生访问冲突

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

不需要 int *pus(char) 直接并到 main() ,用 switch(op)就好

ZLSTJ 发表于 2018-8-15 19:03:26

无符号整形 发表于 2018-8-15 18:45
1.在文件头定义#define _CRT_SECURE_NO_WARNINGS
2.使用scanf_s

不是这个整型吗

无符号整形 发表于 2018-8-15 19:04:32

ZLSTJ 发表于 2018-8-15 19:03
不是这个整型吗

???

Jacob01 发表于 2018-8-15 19:16:50

claws0n 发表于 2018-8-15 18:59
......以后给上报错的资料吧~
但是我给你的建议还是补上。



我的这个写法只是我看小甲鱼视频的时候打的,scanf_s("%d%c%d",&num1,&op, &num2);这个语句不能执行,我输入了,它显示访问冲突

Jacob01 发表于 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");
}

无符号整形 发表于 2018-8-15 19:36:03

Jacob01 发表于 2018-8-15 19:20
只是输入问题,我用这个都不行
#include



先printf三个变量内容试试?
抱歉,我还以为你函数返回的函数返回值不对

claws0n 发表于 2018-8-15 19:40:44

Jacob01 发表于 2018-8-15 19:20
只是输入问题,我用这个都不行
#include



#include<stdio.h>

int add(int, int);
int sub(int, int);
int calc(int , int , char);

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

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

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

int calc(int num1, int num2, char op)
{
    switch (op)
    {
    case '+':return add(num1,num2);break;
    case '-':return sub(num1,num2);break;
    }
}

claws0n 发表于 2018-8-15 19:46:37

Jacob01 发表于 2018-8-15 19:20
只是输入问题,我用这个都不行
#include



指针版本
#include<stdio.h>

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

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

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

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

int calc(int *num1, int *num2, char *op)
{
    switch (*op)
    {
    case '+':return add(num1,num2);break;
    case '-':return sub(num1,num2);break;
    }
}

ZLSTJ 发表于 2018-8-16 03:24:50

无符号整形 发表于 2018-8-15 19:04
???

你的名字

ZLSTJ 发表于 2018-8-16 03:26:04

无符号整形 发表于 2018-8-15 19:04
???

你的名字

无符号整形 发表于 2018-8-16 08:02:32

ZLSTJ 发表于 2018-8-16 03:24
你的名字

无符号整形 发表于 2018-8-16 08:04:05

单步调试一下,看看哪一步出错?

wjp 发表于 2018-8-16 23:52:13

scanf_s("%d %c%d", &num1, &op, &nu你%d和%c之间有个空格

ANGEL晓枫树 发表于 2018-8-17 11:35:54

我之前也有这个问题,你把安全生命开发周期选项关闭掉,勾选空项目就行了
页: [1] 2
查看完整版本: 我用的vs2017,scanf_()函数出错了,哪位大佬知道怎么回事啊?