c - 如何使用 scanf() 获取 int

标签 c

void pedir_diag(int* diag){
  scanf("%i", &diag);
}

int main() {
  int number;

  pedir_diag(&number);

  return 0;
}

当我编译时引入一个整数并期望 main 中的 number int 变量具有引入的值但未设置

我的代码中有这个,但我无法使用 scanf() 函数设置 diag 变量。

最佳答案

diag 已经是一个指针,因此在调用 scanf() 时不需要寻址运算符 (&):

void pedir_diag(int *diag)
{
    scanf("%d", diag);
}

但这样做有点愚蠢。您无法检查是否有错误输入。
更好:

#include <stdbool.h>

bool pedir_diag(int *diag)
{
    return scanf("%d", diag) == 1;  // *)
}

*) scanf() 返回成功转换的次数,因此如果成功转换的次数为 1,我们返回 true

用法:

#include <stdio.h>

int main(void)
{
    int foo;

    if (!pedir_diag(&foo)) {
        fputs("Input error :(\n\n", stderr);
    }
    else {
        // have fun with foo
    }
}

关于c - 如何使用 scanf() 获取 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896018/

相关文章:

c - 带有段错误的二叉搜索树

c - 如何获取目录中的目录数?

c - 结构尺寸优化

c - 如何在需要 super 用户权限的程序上运行 Valgrind?

c - 卡尔曼滤波器实现 - 可能有什么问题

c - 如何使用 LWIP 和 FreeRTOS 让多播在 stm32f7 上工作

c - 删除字符串中的空格

c - 如何修复运行时错误: load of null pointer of type 'const char

c - 如何使用c代码从shell脚本获取返回值

c - 我的 C 程序在新行上打印 -39,但我不明白为什么