我正在尝试将其发布到 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 板发帖。非常感谢您抽出宝贵的时间,希望您一切顺利并受到真正的祝福。
来自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");
}