繁体   English   中英

对 `scanf_s' 的未定义引用

[英]undefined reference to `scanf_s'

我有一个课程作业需要快速完成,这要求我能够以某种方式调试代码。 为了完成任务,我必须能够运行我得到的程序并使用断点逐步引导程序。 我们给出的程序是 ATM 的基本视图,并且有许多错误。

请不要修复代码中的错误,但有人可以告诉我我可以对我收到的与scanf_s行相关的错误做些什么,因为我不断收到错误“scanf_s未定义引用”代码如下如下:

/* This program has been altered purposefully
   so that it contains problems.
   Use the program to complete P2-Debugging a program
   Remember to take screenshots of you do the following:

   Adding a breakpoint at an appropriate point
   Stepping into functions (F11) and over each line of code (F10)
   Changing variables and altering other code, e.g. changing messages
   Watching the values of variables.
   Add comments to the code before taking screenshots.
   Fix the problems if you can. Otherwise, just add comments to the code
   indicating where you think the problems are and what the solution might be.
   Place all evidence into one Word Document and submit it.
   Can you add other improvements?
*/
#include <stdio.h>

int getOption()
{
    int option = 0, nl;
    printf("\nWelcome to the ATM\n");

    printf("\nMenu\n");
    printf("\n1. Withdraw Cash\n");
    printf("\n2. Show Balance\n");
    printf("\n3. Exit\n");
    printf("\nEnter a number from 1 to 3:");
    option = scanf_s("%d%c", &option, &nl);

    return option;
}

//function to allow you to withdraw cash
int withdrawCash()
{
    float amount;
    int nl, option;

    printf("\nHow much money do you want?");
    amount = scanf_s("%d%c", &option, &nl);
    return option;
}

//function to show you your balance
int getBalance()
{
    float balance = 10000;
    int nl, option;

    printf("\nHow much money do you want?");
    balance = scanf_s("%d%c", &option, &nl);
    return balance;
}

//function to update your balance
int updateBalance(float balance, float amount)
{
    int nl, option;
    balance = balance - amount;
    return balance;
}


// main function - start here
int main(void)
{
    int ch;
    int opt = 0;
    int amount = 0;
    int balance = 0;
    float newbal = 0.0;

    opt = getOption();
    printf("\nYou chose option %d\n", opt);
    if (opt == 1)
    {
        amount = withdrawCash();
        newbal = updateBalance(10000, amount);
        printf("\nHere is your %d, your balance is:\n", amount, newbal);
    }
    if (opt == 2)
    {
        balance = getBalance();
        printf("\nHere is your balance: %d\n", balance);
    }

    printf("\nThank you. Please take your card.\n");
    ch = getchar();

    return 0;
}

其中之一:

  • 使用定义了scanf_s()的 Microsoft 编译器。
  • 请改用 ISO C90/C99 标准库函数scanf()
  • 使用带有可选 ISO C11 Annex K 库支持的编译器。
  • 添加#define scanf_s scanf

但是请注意,鉴于格式说明符,您传递给scanf_s的参数不正确 - 它们对于scanf是正确的 - 这可能会建议首选解决方案(并且它不是最后一个 ;-) )。

类似的代码存在链接器问题,并且错误地使用了scanf_s()

scanf_s()需要 2 个参数,每个"%s""%[""%c" :一个char *地址和rsize_t大小。

// scanf_s("%d%c", &option, &nl);
scanf_s("%d%c", &option, &nl,  (rsize_t) 1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM