在此代码中,为什么 scanf() 没有正确设置变量的输入?

问题描述 投票:0回答:1

我正在尝试将其发布到 C 板。如果我问错了地方,或者这不是一个合适的问题,请告诉我,以便删除或移动它。非常感谢。

我正在学习 C 作为我的第一门编程语言,因为我希望我的哲学基础基于 C 及其工作原理。我正在运行一个测试来查看 scanf() 是如何工作的,但它没有像我希望的那样工作,但最重要的是,我不明白为什么。如果我用 cs50 的 get_int 替换 scanf() ,它会按预期工作。使用 scanf() 它说我输入了 0。使用 get_int 它显示输入输入的值。

#include <cs50.h>
#include <stdio.h>
// test result: scanf does not do what I want here.
int main()
{
    int num1;
    num1 = scanf("enter a number: ");
    printf("you entered %d \n", num1);
return 0;
}

此代码编译并运行,但 printf() 的结果是 0,而不是给出的输入。

#include <cs50.h>
#include <stdio.h>
// test result: scanf does not do what I want here.
int main()
{
    int num1;
    num1 = get_int("enter a number: ");
    printf("you entered %d \n", num1);
return 0;
}

此代码也可以编译,但它会打印输入给出的正确值。

我还尝试了以下方法;

#include <cs50.h>
#include <stdio.h>
// test result: scanf does not do what I want here.
int main()
{
    int num1;
    num1 = scanf("enter a number: ", &num1);
    printf("you entered %d \n", num1);
return 0;
}

但它在终端中抛出以下错误:

test.c:7:38:错误:格式字符串未使用数据参数 [-Werror,-Wformat-extra-args] 7 | num1 = scanf("请输入一个数字:", &num1);

我什至尝试将 num1 转换为 num2 和 printf() num2 但这也引发了错误。

这只是一个测试。我想了解发生了什么以及为什么会这样。 Obvs 在这种情况下我可以让它打印正确的结果,但我需要了解 scanf() 是如何工作的,但我无法弄清楚这一点。

再次强调,如果这不是解决此问题的合适版块,请告诉我,以便我删除或移动它。我正在尝试向 C 板发帖。非常感谢您抽出宝贵的时间,希望您一切顺利并受到真正的祝福。

c scanf
1个回答
0
投票

来自cppreference

int scanf( const char *restrict format, ... );

返回值在哪里

成功分配的接收参数数量(如果在分配第一个接收参数之前发生匹配失败,则该数量可能为零),如果在分配第一个接收参数之前发生输入失败,则为 EOF。

而不是您排除的输入值。

正确的用法是:

int num1;
int num = scanf("enter a number: %d", &num1);
if (num > 0) {
    printf("you entered %d number(s): %d\n", num, num1);
} else {
    printf("some error occured\n");
}
© www.soinside.com 2019 - 2024. All rights reserved.