如何使用scanf()获取int

Mau*_*mas 1 c

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

int main() {
  int number;

  pedir_diag(&number);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Swo*_*ish 8

diag已经是一个指针,所以&在调用中不需要address-of运算符()scanf():

void pedir_diag(int *diag)
{
    scanf("%d", diag);
}
Run Code Online (Sandbox Code Playgroud)

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

#include <stdbool.h>

bool pedir_diag(int *diag)
{
    return scanf("%d", diag) == 1;  // *)
}
Run Code Online (Sandbox Code Playgroud)

*)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
    }
}
Run Code Online (Sandbox Code Playgroud)